Competitive Programming Academy · Les

Deelverzamelingen enumereren met bitmaskers

Alle deelverzamelingen via gehele getallen doorlopen

Les 3 van 413 stappen

Deelverzamelingen enumereren met bitmaskers 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.

Deelverzamelingen als getallen

Elke deelverzameling van n items correspondeert met één geheel getal. Tel vanaf 0 omhoog; de bits van elk getal bepalen precies welke items erin zitten. 🙂

Hoeveel deelverzamelingen

Een verzameling van n elementen heeft 2^n deelverzamelingen. Als je dus een geheel getal van 0 tot en met 2^n min 1 doorloopt, bezoek je elke deelverzameling precies één keer.

for mask in range(1 << n):
    pass  # mask is one subset

1 << n is het aantal

De verschuiving 1 << n is gelijk aan 2 tot de macht n. Dit is de duidelijke, snelle manier om de bovengrens van je lus over deelverzamelingen te schrijven.

Bit i lezen

Als je wilt bepalen of element i in de deelverzameling zit, controleer je zijn bit met een masker en 1 die i posities naar links is verschoven. Een resultaat dat niet nul is, betekent dat het element is opgenomen.

if mask & (1 << i):
    take(items[i])

De gekozen lijst opbouwen

Doorloop elke bitpositie en verzamel de elementen waarvan de bit is ingesteld. Zo zet je één masker om in de concrete deelverzameling die het voorstelt.

chosen = [items[i] for i in range(n) if mask & (1 << i)]

Lege en volledige verzamelingen

Masker 0 is de lege deelverzameling en het masker met alleen enen is de volledige verzameling. Beide krijg je vanzelf, omdat je lus elke waarde doorloopt.

Een deelverzameling optellen

Tel binnen de lus de gekozen elementen op om elke deelverzameling een score te geven. Dit vormt de kern van veel kleine bruteforce-oplossingen.

total = sum(v[i] for i in range(n) if mask & (1 << i))

De ingestelde bits tellen

Het aantal gekozen elementen is gelijk aan de popcount van het masker. In Python geeft bin(mask).count('1') dit meteen.

size = bin(mask).count("1")

Let op de grens

Omdat er 2^n deelverzamelingen zijn, werkt deze techniek alleen voor kleine n. Rond n gelijk aan 20 ligt de praktische grens voor volledige opsomming.

Waarom bitmaskers winnen

Met één lus over gehele getallen vervang je rommelige geneste lussen, en bitbewerkingen zijn snel. De code blijft kort, duidelijk en eenvoudig te controleren.

Een herbruikbaar patroon

Doorloop het masker, decodeer de bits, geef de deelverzameling een score en houd de beste bij. Onthoud dit sjabloon en veel problemen met deelverzamelingen worden routine.

Snelle controle

Je wilt controleren of element i is opgenomen in de deelverzameling die door het masker wordt gecodeerd.

Samenvatting

Doorloop een masker van 0 tot en met 2^n min 1, lees bits met het masker en 1 die naar links is verschoven, en geef elke deelverzameling een score. Dit is duidelijke bruteforce voor kleine n. 🚀

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 “Deelverzamelingen enumereren met bitmaskers” gratis?

Ja — de volledige tekst van “Deelverzamelingen enumereren met bitmaskers” 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 “Deelverzamelingen enumereren met bitmaskers”?

Alle deelverzamelingen via gehele getallen doorlopen 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 “Deelverzamelingen enumereren met bitmaskers”?

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. Brute force is een geldige strategie
  2. Enumereren met itertools
  3. Deelverzamelingen enumereren met bitmaskers
  4. De zoekruimte slim verkleinen
← Terug naar Competitive Programming Academy