Voorbereiding op programmeerinterviews · Les

Union by rank en componenten

Bomen compact houden en groepen tellen

Les 2 van 413 stappen

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] * n

Hang 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] = rb

Gelijke 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] += 1

Variant: 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 = n

Unions 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 -= 1

Rang 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! 🎉

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 “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

  1. DSU met padcompressie
  2. Union by rank en componenten
  3. Minimale opspannende boom van Kruskal
  4. MST van Prim met een heap
← Terug naar Voorbereiding op programmeerinterviews