Union by Rank og komponenter
Hold trærne flate og tell grupper
Union by Rank og komponenter er en gratis leksjon i Competitive Programming Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Competitive Programming Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Competitive Programming Academy inneholder totalt 4 leksjoner.
Union kan være naiv
En enkel union henger bare én rot under en annen. Hvis dette gjøres uforsiktig, kan det bygge et høyt og tregt tre, så vi trenger en smartere måte å slå sammen røtter på.
Hovedideen
Union by rank fester alltid det kortere treet under det høyere. Når trærne holdes grunne, blir alle senere find-operasjoner raskere. 📏
Hva rank betyr
Rank er et estimat på høyden til et tre. Hvert element starter med rank 0, siden én enkelt node ikke har noen dybde under seg.
rank = [0] * nFest det kortere under det høyere
Sammenlign rank-verdiene til de to røttene. Roten med lavest rank blir barnet, slik at det sammenslåtte treet holder seg så flatt som mulig.
if rank[ra] < rank[rb]:
parent[ra] = rbLik rank øker rangen
Når begge røttene har samme rank, velger Du én av dem som ny rot og øker ranken med én, siden treet nettopp ble ett nivå høyere.
else:
parent[rb] = ra
if rank[ra] == rank[rb]:
rank[ra] += 1Varianten union by size
Et populært alternativ er union by size: fest den mindre mengden under den større. Det er like effektivt og gir gruppestørrelsene uten ekstra kostnad.
Tell komponenter
Start et antall på n, siden hvert element er sin egen gruppe. Hver vellykkede union slår sammen to grupper til én, så Du reduserer antallet.
components = nHopp over union-operasjoner uten effekt
Hvis to elementer allerede deler en rot, gjør union ingenting. Reduser bare antallet når røttene faktisk er forskjellige.
if find(a) != find(b):
union(a, b)
components -= 1Rank pluss komprimering
Kombiner union by rank med path compression, så kjører DSU på invers-Ackermann-tid, som i praksis er konstant for alle reelle inndata. ⚡
Gruppestørrelser ved behov
Med union by size kan Du svare umiddelbart på hvor stor en gruppe er: les bare av size som er lagret ved elementets rot.
group = size[find(x)]Hvor dette er nyttig
Komponenttelling besvarer klassiske spørsmål som hvor mange vennekretser eller sammenhengende regioner det finnes etter en rekke union-kall. 🌐
Rask sjekk
Tenk gjennom hvordan komponenttelleren endres.
Oppsummering
Du lærte union by rank for å holde trærne flate, og hvordan du sporer antall komponenter og gruppestørrelser. DSU er nå lynrask! 🎉
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Union by Rank og komponenter» gratis?
Ja – hele teksten i «Union by Rank og komponenter» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Competitive Programming Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Competitive Programming Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Union by Rank og komponenter»?
Hold trærne flate og tell grupper Du øver på Competitive Programming Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Competitive Programming Academy?
Ingen tidligere erfaring er nødvendig. Competitive Programming Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Union by Rank og komponenter»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Competitive Programming Academy-leksjonen?
Ja. Alle Competitive Programming Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- DSU med banekomprimering
- Union by Rank og komponenter
- Kruskal og minimalt spennende tre
- Prims MST med en heap