Union by rank en componenten
Bomen compact houden en groepen tellen
Union by rank en componenten is een gratis Voorbereiding op programmeerinterviews-les op CoddyKit. Dit is les 2 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.
Union kan zonder strategie
Een eenvoudige union hangt de ene wortel onder de andere. Als je dit onzorgvuldig doet, kan er een hoge, trage boom ontstaan. Daarom hebben we een slimmere manier nodig om wortels samen te voegen.
Het hoofdidee
Union op basis van rang hangt de kortere boom altijd onder de hogere. Door de bomen ondiep te houden, wordt elke volgende find sneller. 📏
Wat rang betekent
Rang is een schatting van de hoogte van een boom. Elk element begint met rang 0, omdat een enkele knoop geen diepte onder zich heeft.
rank = [0] * nHang de kortere onder de hogere
Vergelijk de rangen van de twee wortels. De wortel met de lagere rang wordt het kind, zodat de gecombineerde boom zo vlak mogelijk blijft.
if rank[ra] < rank[rb]:
parent[ra] = rbGelijke rangen verhogen de rang
Als beide wortels een gelijke rang hebben, kies je een van beide als nieuwe wortel en verhoog je diens rang met één, omdat de boom één niveau hoger is geworden.
else:
parent[rb] = ra
if rank[ra] == rank[rb]:
rank[ra] += 1Variant: union op basis van grootte
Een populair alternatief is union op basis van grootte: hang de kleinere verzameling onder de grotere. Dit werkt net zo goed en levert de groepsgroottes er gratis bij.
Componenten tellen
Begin het aantal op n, omdat elk element zijn eigen groep is. Elke geslaagde union voegt twee groepen samen, dus verlaag je het aantal.
components = nUnions zonder effect overslaan
Als twee elementen al dezelfde wortel hebben, doet union niets. Verlaag het aantal alleen als hun wortels echt verschillen.
if find(a) != find(b):
union(a, b)
components -= 1Rang plus compressie
Combineer union op basis van rang met padcompressie en DSU werkt in inverse-Ackermann-tijd, die voor elke realistische invoer praktisch constant is. ⚡
Groepsgroottes op aanvraag
Met union op basis van grootte kun je onmiddellijk bepalen hoe groot elke groep is: lees gewoon de grootte af die bij de wortel van het element is opgeslagen.
group = size[find(x)]Waar dit helpt
Het tellen van componenten beantwoordt klassieke vragen, zoals hoeveel vriendengroepen of verbonden gebieden er zijn na een reeks aanroepen van union. 🌐
Korte controle
Redeneer over hoe de componententeller verandert.
Samenvatting
Je hebt union by rank geleerd om bomen plat te houden en te tellen hoeveel componenten en hoe grote groepen er zijn. DSU is nu razendsnel! 🎉
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 “Union by rank en componenten” gratis?
Ja — de volledige tekst van “Union by rank en componenten” 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 “Union by rank en componenten”?
Bomen compact houden en groepen tellen 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 2 van 4.
Hoe lang duurt de les “Union by rank en componenten”?
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
- DSU met padcompressie
- Union by rank en componenten
- Minimale opspannende boom van Kruskal
- MST van Prim met een heap