share: true
aliases:
- Union-Find
- Union find
- UnionFind
- Keřík
- Keříky
Union-Find
-
Struktura, kterou využívá například Kruskalův algoritmus
-
Reprezentuje komponenty souvislosti grafu a umí na nich provádět následující operace:
- - vrátí identifikátor komponenty, ve které leží vrchol
- Pokud pro testovanou hranu platí, že a patří ro různých komponent, pak tyto komponenty spojí do jedné
-
(Obecně: Zjišťuje, do jaké ekvivalenční třídy prvek patří, umí spojit ekvivalenční třídy dohromady)
Implementace pomocí pole
- Triviální přístup: použijeme pole, které každému vrcholu přiřadí číslo komponenty
- - přečte číslo v
- - projde všechny vrcholy jedné komponenty a přiřadí jim číslo té druhé v
Implementace pomocí keříků
- Reprezentační stromy v Union-Findu budeme nazývat keříky, aby se nám nepletly se stromy v Kruskalově algoritmu
- Každou komponentu (strom), vznikající během Kruskala, budeme reprezentovat speciálním stromem (keříkem) orientovaným směrem do kořene
- Vrcholy keříků odpovídají vrcholům příslušné komponenty
- Každý vrchol si pamatuje pouze svého otce
- Kořeny keříků mají (nemají otce)
- - vystoupá postupně do kořene a vrátí ID kořene (tedy komponenty), trvá hloubka
- - mělčí keřík napojí pod kořen hlubšího, případně zvýší hloubku +1 pokud jsou stejné, trvá
- (je nutné si u každého pamatovat jeho hloubku, né ji vždy počítat)
Vytvořeno: 7. 8. 2024, 13:25
Poslední aktualizace: 7. 8. 2024, 13:25