Competitive Programming Academy · Les

Meet in the Middle

De exponent halveren door de zoekruimte te splitsen

Les 3 van 413 stappen

Meet in the Middle is een gratis Competitive Programming Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Competitive Programming Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Competitive Programming Academy bevat in totaal 4 lessen.

Wanneer brute kracht te traag is

Sommige problemen hebben een N van ongeveer 40, waarbij alle 2^N deelverzamelingen proberen hopeloos is. De middenmethode biedt uitkomst voor zulke middelgrote gevallen. 🤝

Het kernidee

Splits de invoer in twee helften. Los elke helft op met brute kracht en combineer daarna de twee gedeeltelijke resultaten op een slimme manier.

De exponent halveren

Twee helften van grootte N/2 kosten elk 2^(N/2) in plaats van in totaal 2^N. Die verkleining tot een vierkantswortel maakt van 2^40 een hanteerbare 2^20.

Een klassiek doel: som van een deelverzameling

Vraag of een deelverzameling optelt tot een doelwaarde T. De som van een deelverzameling met N rond 40 is het schoolvoorbeeld van een probleem voor de middenmethode.

De eerste helft opsommen

Noteer elke som van een deelverzameling uit de linkerhelft en sla ze op. Met N/2 elementen zijn dat slechts 2^(N/2) sommen.

from itertools import combinations
left = arr[:len(arr)//2]
sums_l = []

De tweede helft opsommen

Doe hetzelfde voor de rechterhelft en bouw de volledige lijst met sommen van deelverzamelingen op. Nu heb je twee hanteerbare lijsten.

Combineren met een opzoeking

Voor elke rechtersom r heb je een linkersom nodig die gelijk is aan T minus r. Met een verzameling of gesorteerde lijst kun je dat snel controleren.

need = T - r
found = need in left_set

Twee manieren om te koppelen

Gebruik voor exacte doelen een hashverzameling. Sorteer voor aantallen of zo dicht mogelijke sommen één helft en zoek er binair in.

De tijdskosten

Het totale werk is ongeveer 2^(N/2) maal een logaritmische factor voor het zoeken of sorteren. Die complexiteit maakt een N rond 40 haalbaar.

Geheugen is de afweging

Je slaat één volledige helft op, dus het geheugen groeit tot 2^(N/2). Bewaar alleen wat nodig is om binnen de limiet te blijven.

Waar het nog meer uitblinkt

Gebruik het naast de som van een deelverzameling voor de maximale deelverzameling onder een bovengrens, het tellen van paren en problemen in de stijl van discrete logaritmen. Het werkt goed met een duidelijke splitsing.

Snelle controle

Je past de middenmethode toe op een probleem met deelverzamelingen en N elementen. Wat zijn ongeveer de tijdskosten?

Samenvatting

Splits in twee helften, probeer elke helft met brute kracht en koppel daarna de linker- en rechtersom. Je ruilt een klein beetje geheugen in voor een enorme snelheidswinst. 🚀

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “Meet in the Middle” gratis?

Ja — de volledige tekst van “Meet in the Middle” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Competitive Programming Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Competitive Programming Academy bevat in totaal 4 lessen.

Wat leer ik in “Meet in the Middle”?

De exponent halveren door de zoekruimte te splitsen Je oefent met Competitive Programming Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Competitive Programming Academy te beginnen?

Ervaring vooraf is niet nodig. Competitive Programming Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Meet in the Middle”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Competitive Programming Academy?

Ja. Elke les over Competitive Programming Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Winnende en verliezende toestanden in spellen
  2. Nim en het Grundy-getal
  3. Meet in the Middle
  4. Snel debuggen: stresstests en triage
← Terug naar Competitive Programming Academy