Voorbereiding op programmeerinterviews · Les

Subset sum en partition

Met een gekozen subset een doel bereiken

Les 4 van 413 stappen

Subset sum en partition is een gratis Voorbereiding op programmeerinterviews-les op CoddyKit. Dit is les 4 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 Voorbereiding op programmeerinterviews. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Voorbereiding op programmeerinterviews bevat in totaal 4 lessen.

De vraag over de som van een deelverzameling

Gegeven getallen en een doel: kan een deelverzameling precies dat doel vormen? Dit is een knapzakprobleem waarbij waarde gelijk is aan gewicht.

Booleaanse DP, geen waarde

Hier houd je bereikbaarheid bij, geen maximum. Laat dp[s] True zijn wanneer een deelverzameling precies s als som heeft.

dp = [False] * (target + 1)
dp[0] = True

Nul is altijd bereikbaar

De lege deelverzameling heeft nul als som, dus dp[0] begint als True. Elke andere som begint als False totdat een getal bewijst dat die bereikbaar is.

De overgang

Markeer voor elk getal s als bereikbaar als s - num dat al was. Eén getal kan veel sommen naar True veranderen.

for num in nums:
    for s in range(target, num - 1, -1):
        dp[s] = dp[s] or dp[s - num]

Opnieuw achteruit

Elk getal mag hoogstens één keer worden gebruikt, dus de binnenste lus loopt achteruit, net als bij het 0/1-knapzakprobleem. Vooruitgaan zou een getal hergebruiken.

Lees het oordeel af

Na het verwerken van alle getallen geeft dp[target] antwoord op de vraag. True betekent dat er een geldige deelverzameling bestaat; False betekent dat dit onmogelijk is.

Maak kennis met partitionering

Het partitieprobleem vraagt: kun je de array opsplitsen in twee delen met dezelfde som? Het is rechtstreeks terug te brengen tot deelverzamelingssom.

Halveer het totaal

Als de totale som oneven is, zijn gelijke helften onmogelijk en antwoord je meteen nee. Anders is het doel eenvoudigweg total // 2.

total = sum(nums)
if total % 2:
    return False
target = total // 2

Gebruik deelverzamelingssom opnieuw

Vraag nu alleen of een deelverzameling total // 2 bereikt. Als één helft het doel bereikt, vormt de rest automatisch de bijbehorende tweede helft.

De complexiteit

De kosten zijn van orde n maal het doel, een pseudopolynomiale bovengrens. Het is snel als het doel klein is en traag als de sommen enorm zijn.

Eén familie van problemen

Som van deelverzamelingen, partitie en het 0/1-rugzakprobleem delen één motor. Herken het patroon van nemen of overslaan en gebruik dezelfde lus opnieuw.

Snelle controle

Test de reductie voor het partitieprobleem.

Samenvatting

Je hebt de som van een deelverzameling opgelost met booleaanse DP en een lus achteruit, en het partitieprobleem teruggebracht tot het bereiken van total // 2. Dezelfde motor, nieuwe winst. ✅

Gratis beginnen

Leer Voorbereiding op programmeerinterviews 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
90
Lessen
360

Veelgestelde vragen

Is de les “Subset sum en partition” gratis?

Ja — de volledige tekst van “Subset sum en partition” 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 Voorbereiding op programmeerinterviews wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Voorbereiding op programmeerinterviews bevat in totaal 4 lessen.

Wat leer ik in “Subset sum en partition”?

Met een gekozen subset een doel bereiken Je oefent met Voorbereiding op programmeerinterviews 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 Voorbereiding op programmeerinterviews te beginnen?

Ervaring vooraf is niet nodig. Voorbereiding op programmeerinterviews 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 4 van 4.

Hoe lang duurt de les “Subset sum en partition”?

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 Voorbereiding op programmeerinterviews?

Ja. Elke les over Voorbereiding op programmeerinterviews 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. 0/1 knapsack: nemen of laten
  2. Knapsack met geoptimaliseerd geheugengebruik
  3. Onbegrensde knapsack en coin-change-DP
  4. Subset sum en partition
← Terug naar Voorbereiding op programmeerinterviews