AI EducademyAIEducademy
🌳

أسس الذكاء الاصطناعي

🌱
AI Seeds

Start from zero

🌿
AI Sprouts

Build foundations

🌳
AI Branches

Apply in practice

🏕️
AI Canopy

Go deep

🌲
AI Forest

Master AI

🔨

إتقان الذكاء الاصطناعي

✏️
AI Sketch

Start from zero

🪨
AI Chisel

Build foundations

⚒️
AI Craft

Apply in practice

💎
AI Polish

Go deep

🏆
AI Masterpiece

Master AI

🚀

جاهز للمسيرة المهنية

🚀
منصة انطلاق المقابلات

ابدأ رحلتك

🌟
إتقان المقابلات السلوكية

أتقن المهارات الشخصية

💻
المقابلات التقنية

تفوّق في جولة البرمجة

🤖
مقابلات الذكاء الاصطناعي وتعلم الآلة

إتقان مقابلات تعلم الآلة

🏆
العرض وما بعده

احصل على أفضل عرض

عرض كل البرامج→

المختبر

تم تحميل 7 تجارب
🧠ملعب الشبكة العصبية🤖ذكاء اصطناعي أم إنسان؟💬مختبر التوجيهات🎨مولّد الصور😊محلل المشاعر💡باني روبوت الدردشة⚖️محاكي الأخلاقيات
🎯مقابلة تجريبيةدخول المختبر→
nav.journeyالمدونة
🎯
عن المنصة

جعل تعليم الذكاء الاصطناعي متاحاً للجميع في كل مكان

❓
الأسئلة الشائعة

Common questions answered

✉️
Contact

Get in touch with us

⭐
مفتوح المصدر

مبني علناً على GitHub

ابدأ الآن
AI EducademyAIEducademy

رخصة MIT. مفتوح المصدر

تعلّم

  • البرامج الأكاديمية
  • الدروس
  • المختبر

المجتمع

  • GitHub
  • المساهمة
  • قواعد السلوك
  • عن المنصة
  • الأسئلة الشائعة

الدعم

  • اشترِ لي قهوة ☕
  • footer.terms
  • footer.privacy
  • footer.contact
البرامج الأكاديمية للذكاء الاصطناعي والهندسة›🪨 AI Chisel›الدروس›المؤشران المتحركان والنافذة المنزلقة
👆
AI Chisel • متوسط⏱️ 15 دقيقة للقراءة

المؤشران المتحركان والنافذة المنزلقة

Why Scanning Smartly Matters

Imagine an AI monitoring a live video feed for suspicious activity. It cannot rewatch the entire recording every second - it needs to slide a window of attention across the stream, keeping track of just enough context. That is exactly what the two pointers and sliding window patterns do for sequential data.

Both techniques turn brute-force O(n²) scans into elegant O(n) passes.

Two pointers converging from both ends of an array and a sliding window moving across a data stream
Two pointers shrink the search space; a sliding window maintains a running view.

The Two Pointer Technique

Place two references into a sequence and move them according to a rule. There are two main flavours.

Converging Pointers

Start one pointer at each end and move them inward. Perfect for sorted data.

Classic problem - Pair Sum: Given a sorted array, find two numbers that add to a target.

function pairSum(arr, target):
    left = 0
    right = arr.length - 1
    while left < right:
        sum = arr[left] + arr[right]
        if sum == target: return (left, right)
        if sum < target: left += 1
        else: right -= 1
    return null

Because the array is sorted, moving left right increases the sum, and moving right left decreases it - guaranteeing we never miss a valid pair.

Same-Direction Pointers

Both pointers move forward, but at different speeds. Useful for partitioning or cycle detection.

Example - Remove duplicates in-place: A slow pointer marks the write position; a fast pointer scans ahead.

function removeDuplicates(arr):
    slow = 0
    for fast in 1..arr.length - 1:
        if arr[fast] != arr[slow]:
            slow += 1
            arr[slow] = arr[fast]
    return slow + 1
🧠فحص سريع

In the converging two-pointer technique on a sorted array, what should you do when the current sum is less than the target?

الدرس 1 من 100٪ مكتمل
←العودة للبرنامج

Discussion

Sign in to join the discussion

lessons.suggestEdit

The Sliding Window Pattern

A sliding window maintains a contiguous sub-sequence of size k (fixed) or variable length, updating aggregates incrementally instead of recalculating from scratch.

Fixed-Size Window

Slide a window of exactly k elements across the array.

Example - Maximum sum of any k consecutive elements:

function maxSubarraySum(arr, k):
    windowSum = sum(arr[0..k-1])
    best = windowSum
    for i in k..arr.length - 1:
        windowSum += arr[i] - arr[i - k]
        best = max(best, windowSum)
    return best

Each step adds the new element entering the window and subtracts the one leaving - O(1) per move.

Variable-Size Window

Expand the window to include more data, then shrink it when a constraint is violated.

Example - Longest substring without repeating characters:

function longestUnique(s):
    seen = {}
    left = 0
    best = 0
    for right in 0..s.length - 1:
        if s[right] in seen and seen[s[right]] >= left:
            left = seen[s[right]] + 1
        seen[s[right]] = right
        best = max(best, right - left + 1)
    return best
🤯
Streaming analytics platforms like Apache Flink use sliding and tumbling windows as first-class primitives - the same concept scaled to millions of events per second.

Real AI Applications

| Pattern | AI Use Case | |---------|------------| | Fixed window | Anomaly detection over the last k sensor readings | | Variable window | Finding the shortest text span containing all query keywords (search engines) | | Converging pointers | Efficient nearest-neighbour checks in sorted embedding dimensions | | Same-direction pointers | Merging sorted result lists from multiple retrieval models |

🤔
Think about it:A voice assistant buffers the last 3 seconds of audio to detect a wake word. Which pattern is this - fixed window or variable window? What happens if the wake word is longer than the buffer?

When to Use Which

  • Two pointers (converging): sorted input, pair/triplet search, palindrome checks.
  • Two pointers (same-direction): in-place modifications, fast/slow runner problems.
  • Fixed sliding window: aggregate over a known window size.
  • Variable sliding window: find the smallest or largest window satisfying a condition.
🧠فحص سريع

Which pattern would you choose to find the smallest subarray whose sum exceeds a given value?

🤔
Think about it:Could you combine two pointers with a sliding window? Think about problems where you need to find a pair within a rolling window of data - for instance, detecting duplicate transactions within a five-minute window.

Key Takeaways

  1. Two pointers eliminate nested loops by leveraging ordering or partitioning.
  2. Sliding windows maintain running state so each element is processed at most twice.
  3. Both patterns are foundational in real-time AI pipelines - from anomaly detection to search ranking.
🧠فحص سريع

What is the typical time complexity achieved by converting a brute-force nested loop into a two-pointer or sliding-window solution?