AI EducademyAIEducademy
🌳

AI-Fundamenten

🌱
AI Seeds

Begin bij nul

🌿
AI Sprouts

Bouw een fundament

🌳
AI Branches

Pas toe in de praktijk

🏕️
AI Canopy

Ga de diepte in

🌲
AI Forest

Beheers AI

🔨

AI-Meesterschap

✏️
AI Sketch

Begin bij nul

🪨
AI Chisel

Bouw een fundament

⚒️
AI Craft

Pas toe in de praktijk

💎
AI Polish

Ga de diepte in

🏆
AI Masterpiece

Beheers AI

🚀

Carrière Klaar

🚀
Interview Startplatform

Start je reis

🌟
Gedragsinterview Meesterschap

Beheers soft skills

💻
Technische Interviews

Slaag voor de codeerronde

🤖
AI- & ML-interviews

ML-interview meesterschap

🏆
Aanbod & verder

Bemachtig het beste aanbod

Alle programma's bekijken→

Lab

7 experimenten geladen
🧠Neuraal netwerk speeltuin🤖AI of mens?💬Prompt lab🎨Beeldgenerator😊Sentimentanalyse💡Chatbot bouwer⚖️Ethiek simulator
🎯Proef-sollicitatieGa naar het lab→
nav.journeyBlog
🎯
Over ons

AI-onderwijs toegankelijk maken voor iedereen, overal

❓
nav.faq

Common questions answered

✉️
Contact

Get in touch with us

⭐
Open Source

Openbaar gebouwd op GitHub

Begin met leren, het is gratis
AI EducademyAIEducademy

MIT-licentie. Open source

Leren

  • Opleidingen
  • Lessen
  • Lab

Community

  • GitHub
  • Bijdragen
  • Gedragscode
  • Over ons
  • FAQ

Ondersteuning

  • Koop een koffie voor me ☕
  • footer.terms
  • footer.privacy
  • footer.contact
AI & Engineering Opleidingen›🪨 AI Chisel›Lessen›Twee pointers en sliding window
👆
AI Chisel • Gemiddeld⏱️ 15 min leestijd

Twee pointers en sliding window

Waarom slim scannen belangrijk is

Stel je een AI voor die een live videofeed bewaakt op verdachte activiteit. Het kan niet elke seconde de hele opname opnieuw bekijken - het moet een aandachtsvenster over de stream schuiven, met net genoeg context. Dat is precies wat de two pointers en sliding window patronen doen voor sequentiële data.

Beide technieken veranderen brute-force O(n²) scans in elegante O(n) doorlopen.

Two pointers die van beide uiteinden van een array convergeren en een sliding window die over een datastroom beweegt
Two pointers verkleinen de zoekruimte; een sliding window houdt een doorlopend overzicht bij.

De Two Pointer techniek

Plaats twee referenties in een reeks en verplaats ze volgens een regel. Er zijn twee hoofdvarianten.

Convergerende pointers

Begin met één pointer aan elk uiteinde en beweeg ze naar binnen. Ideaal voor gesorteerde data.

Klassiek probleem - Pair Sum: Gegeven een gesorteerde array, vind twee getallen die optellen tot een doel.

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

Omdat de array gesorteerd is, verhoogt het verplaatsen van left naar rechts de som, en verlaagt het verplaatsen van right naar links de som - waardoor geen enkel geldig paar wordt gemist.

Pointers in dezelfde richting

Beide pointers bewegen vooruit, maar met verschillende snelheden. Handig voor partitionering of cyclusdetectie.

Voorbeeld - Duplicaten in-place verwijderen: Een langzame pointer markeert de schrijfpositie; een snelle pointer scant vooruit.

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
🧠Snelle check

Wat moet je bij de convergerende two-pointer techniek op een gesorteerde array doen wanneer de huidige som kleiner is dan het doel?

Les 1 van 100% voltooid
←Terug naar programma

Discussion

Sign in to join the discussion

lessons.suggestEdit

Het Sliding Window patroon

Een sliding window houdt een aaneengesloten deelreeks bij van grootte k (vast) of variabele lengte, en werkt aggregaten incrementeel bij in plaats van helemaal opnieuw te berekenen.

Vast-formaat window

Schuif een window van precies k elementen over de array.

Voorbeeld - Maximale som van k opeenvolgende elementen:

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

Elke stap voegt het nieuwe element toe dat het window binnenkomt en trekt het element af dat vertrekt - O(1) per verplaatsing.

Variabel-formaat window

Breid het window uit om meer data op te nemen, en krimp het weer wanneer een beperking wordt geschonden.

Voorbeeld - Langste substring zonder herhalende karakters:

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 platformen zoals Apache Flink gebruiken sliding en tumbling windows als eersteklas primitieven - hetzelfde concept opgeschaald naar miljoenen events per seconde.

Toepassingen in AI

| Patroon | AI-toepassing | |---------|--------------| | Vast window | Anomaliedetectie over de laatste k sensormetingen | | Variabel window | De kortste tekstspanne vinden die alle zoekwoorden bevat (zoekmachines) | | Convergerende pointers | Efficiënte nearest-neighbour controles in gesorteerde embedding-dimensies | | Dezelfde-richting pointers | Samenvoegen van gesorteerde resultaatlijsten van meerdere retrieval-modellen |

🤔
Think about it:Een spraakassistent buffert de laatste 3 seconden audio om een wake word te detecteren. Welk patroon is dit - vast window of variabel window? Wat gebeurt er als het wake word langer is dan de buffer?

Wanneer welk patroon gebruiken

  • Two pointers (convergerend): gesorteerde invoer, paar-/drietalzoekopdrachten, palindroomcontroles.
  • Two pointers (dezelfde richting): in-place aanpassingen, fast/slow runner problemen.
  • Vast sliding window: aggregaat over een bekende venstergrootte.
  • Variabel sliding window: de kleinste of grootste window vinden die aan een voorwaarde voldoet.
🧠Snelle check

Welk patroon zou je kiezen om de kleinste subarray te vinden waarvan de som een gegeven waarde overschrijdt?

🤔
Think about it:Zou je two pointers met een sliding window kunnen combineren? Denk aan problemen waarbij je een paar moet vinden binnen een rollend datavenster - bijvoorbeeld het detecteren van dubbele transacties binnen een venster van vijf minuten.

Belangrijkste inzichten

  1. Two pointers elimineren geneste lussen door gebruik te maken van ordening of partitionering.
  2. Sliding windows behouden een lopende staat zodat elk element maximaal twee keer wordt verwerkt.
  3. Beide patronen zijn fundamenteel in real-time AI-pipelines - van anomaliedetectie tot zoekrangschikking.
🧠Snelle check

Wat is de typische tijdscomplexiteit die wordt bereikt door een brute-force geneste lus om te zetten naar een two-pointer of sliding-window oplossing?