Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany



Podobne dokumenty
Warto wspomnieć jeszcze o typach gier. Wg kryterium końca gry wyróżniamy gry:

Konstrukcja spójnego obrazu stanu globalnego algorytmy

Różne reprezentacje mapy feromonowej w problemie plecakowym

Copyright Zgoda na bezpłatne powielanie i rozpowszechnianie całości opracowania

Umieszczanie zbiorów częściowo uporządkowanych w książce o minimalnej liczbie stron

System plików warstwa fizyczna. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

USOS: System raportowania i analiz statystycznych

URZĄDZENIA TECHNIKI KOMPUTEROWEJ CZĘŚĆ 1 JAK DZIAŁA KOMPUTER?

Pozycjonowanie stron dla początkujących!

Alina Kalinowska. Pozwólmy dzieciom działać. mity i fakty o rozwijaniu myślenia matematycznego

AutoCAD -- kurs podstawowy

Czas wirtualny, złożoność algorytmów

1.1 Poznaj swój czterodziałaniowy kalkulator

Jak napisać pracę magisterską - - uwag technicznych kilka

Mini Poradnik UPC. e-aktywacja: wszystkie pokolenia w Internecie! Zaproś rodziców i dziadków do sieci: naucz Ich korzystania z komputera i Internetu.

Poradnik Badaj interaktywnie

Ocenianie kształtujące: Dzielmy się tym, co wiemy! Zeszyt trzeci: Informacja zwrotna

Tytuł: Professional Mobile Web Development with WordPress, Joomla!, and Drupal

Zdolne dziecko. Pierwsza pomoc

System Zarządzania Treścią czyli jak prosto i przyjemnie zarządzać serwisem internetowym

Jak zaprojektować i uruchomić prostą stronę internetową?

Jak działa Internet i co z tego wynika dla prób jego regulacji?

Jak ćma przejawy depresji w różnych okresach życia

Warunki dla rozwoju przedsiębiorczości w powiecie kościerskim

PORADNIK MARKETINGOWY

PROWADZENIE WYCIĄGU. Wstęp: Tomasz Kliś. 1. Właściwości liny wspinaczkowej

Zrób to sam. Jak zostać badaczem społeczności lokalnej? Poradnik dla domów kultury

Wprowadzenie do środowiska R

Prawie wszystko o prowadzeniu bloga firmowego przez dział HR

Transkrypt:

, 1 2 3, czas zamortyzowany zajęcia 3. Wojciech Śmietanka, Tomasz Kulczyński, Błażej Osiński

rozpinajace, 1 2 3 rozpinajace Mamy graf nieskierowany, ważony, wagi większe od 0. Chcemy wybrać taki podzbiór krawędzi, żeby : była droga pomiędzy każda para wierzchołków suma wag wybranych krawędzi była minimalna

rozpinajace, 1 2 3 rozpinajace Mamy graf nieskierowany, ważony, wagi większe od 0. Chcemy wybrać taki podzbiór krawędzi, żeby : była droga pomiędzy każda para wierzchołków suma wag wybranych krawędzi była minimalna

rozpinajace, 1 2 3 rozpinajace Mamy graf nieskierowany, ważony, wagi większe od 0. Chcemy wybrać taki podzbiór krawędzi, żeby : była droga pomiędzy każda para wierzchołków suma wag wybranych krawędzi była minimalna

, 1 2 3 Popatrzmy na poniższa sieć połaczeń i spróbujmy znaleźć drzewo rozpinajace tej sieci. 1 6 6 2 1 5 2 2 4 1 3 4 1 3 1 5 7 7

, 1 2 3 W tym celu wypiszmy sobie wszystkie krawędzie posortowane po rosnacej wadze: koniec 1 koniec 2 waga 6 7 1 3 5 1 6 4 1 4 7 1 1 2 2 2 4 2 2 3 3 4 5 4 1 3 5 1 6 6 5 7 7

I co dalej?, 1 2 3 Patrzymy na kolejne krawędzie z tej listy próbujemy dodawać je do budowanego drzewa rozpinajacego jeśli dana krawędź łaczy dwa wierzchołki, między którymi nie było drogi, to dodajemy ja do drzewa jeśli nie, to odrzucamy kontynuujemy, aż wszystkie wierzchołki będa połaczone

I co dalej?, 1 2 3 Patrzymy na kolejne krawędzie z tej listy próbujemy dodawać je do budowanego drzewa rozpinajacego jeśli dana krawędź łaczy dwa wierzchołki, między którymi nie było drogi, to dodajemy ja do drzewa jeśli nie, to odrzucamy kontynuujemy, aż wszystkie wierzchołki będa połaczone

I co dalej?, 1 2 3 Patrzymy na kolejne krawędzie z tej listy próbujemy dodawać je do budowanego drzewa rozpinajacego jeśli dana krawędź łaczy dwa wierzchołki, między którymi nie było drogi, to dodajemy ja do drzewa jeśli nie, to odrzucamy kontynuujemy, aż wszystkie wierzchołki będa połaczone

I co dalej?, 1 2 3 Patrzymy na kolejne krawędzie z tej listy próbujemy dodawać je do budowanego drzewa rozpinajacego jeśli dana krawędź łaczy dwa wierzchołki, między którymi nie było drogi, to dodajemy ja do drzewa jeśli nie, to odrzucamy kontynuujemy, aż wszystkie wierzchołki będa połaczone

I co dalej?, 1 2 3 Patrzymy na kolejne krawędzie z tej listy próbujemy dodawać je do budowanego drzewa rozpinajacego jeśli dana krawędź łaczy dwa wierzchołki, między którymi nie było drogi, to dodajemy ja do drzewa jeśli nie, to odrzucamy kontynuujemy, aż wszystkie wierzchołki będa połaczone

, 1 2 3 Sieć: 1 6 6 2 1 5 2 2 4 1 3 4 1 3 1 5 7 7 aktualna krawędź: 6 7 1 przychodzi krawędź 6 7 1, nie da się jeszcze przejechać między 6 a 7, dodajemy tę krawędź

, 1 2 3 Sieć: 1 6 6 2 1 5 2 2 4 1 3 4 1 3 1 5 7 7 aktualna krawędź: 3 5 1 przychodzi krawędź 3 5 1, j a też dodajemy do budowanego drzewa

, 1 2 3 Sieć: 1 6 6 2 1 5 2 2 4 1 3 4 1 3 1 5 7 7 aktualna krawędź: 6 4 1 przychodzi krawędź 6 4 1, j a też dodajemy do budowanego drzewa

, 1 2 3 Sieć: 1 6 6 2 1 5 2 2 4 1 3 4 1 3 1 5 7 7 aktualna krawędź: 7 4 1 przychodzi krawędź 7 4 1, ale nie jest potrzebna, jest już droga między 7 i 4

, Sieć: 1 6 6 1 2 3 2 1 5 2 2 4 1 3 4 1 3 1 5 7 7 aktualna krawędź: 1 2 2 krawędź 1 2 2 łaczy nie połaczone jeszcze wierchołki 1, 2

, Sieć: 1 6 6 1 2 3 2 1 5 2 2 4 1 3 4 1 3 1 5 7 7 aktualna krawędź: 2 4 2 krawędź 2 4 2 łaczy 2 i 4, nie były one jeszcze połaczone

, Sieć: 1 6 6 1 2 3 2 1 5 2 2 4 1 3 4 1 3 1 5 7 7 aktualna krawędź: 2 3 3 krawędź 2 3 3 łaczy niepołaczone dotad 2 i 3

, Sieć: 1 6 6 1 2 3 2 1 5 2 2 4 1 3 4 1 3 1 5 7 7 Hurra! Cały graf jest już połaczony drzewem rozpinajacym!

A skad wiadomo, że..?, 1 2 3 A skad wiadomo, że wierzchołki sa w jednej spójnej składowej? do tej pory pomijaliśmy to milczeniem wystarczyło spojrzeć na rysunek niestety ciężko wytłumaczyć komputerowi, żeby spojrzał na rysunek

A skad wiadomo, że..?, 1 2 3 A skad wiadomo, że wierzchołki sa w jednej spójnej składowej? do tej pory pomijaliśmy to milczeniem wystarczyło spojrzeć na rysunek niestety ciężko wytłumaczyć komputerowi, żeby spojrzał na rysunek

A skad wiadomo, że..?, 1 2 3 A skad wiadomo, że wierzchołki sa w jednej spójnej składowej? do tej pory pomijaliśmy to milczeniem wystarczyło spojrzeć na rysunek niestety ciężko wytłumaczyć komputerowi, żeby spojrzał na rysunek

A skad wiadomo, że..?, 1 2 3 A skad wiadomo, że wierzchołki sa w jednej spójnej składowej? do tej pory pomijaliśmy to milczeniem wystarczyło spojrzeć na rysunek niestety ciężko wytłumaczyć komputerowi, żeby spojrzał na rysunek

Co potrzeba?, 1 2 3 Co potrzeba? Potrzebna jest struktura danych, która pozwala szybko sprawdzić, czy dane dwa wierzchołki leża w jednej składowej oraz potrafiaca szybko łaczyć dwa wierzchołki. Innymi słowy potrzebujemy reprezentantentować rodzinę rozłacznych zbiorów wierzchołków. Czasem będziemy łaczyć dwa takie w jeden (dodanie krawędzi). Czasem zaś będziemy zadawać pytanie, czy dane dwa wierzchołki należa do tego samego zbioru.

Specyfikacja, 1 2 3 Specyfikacja Mamy poczatkowo n zbiorów (np. po jednym zbiorze na wierzchołek), m zapytań postaci Czy elementy x i y należa do tego samego zbioru (zapytanie odpowiada krawędzi) oraz co najwyżej n 1 operacji scalenia zbiorów. Wyróżniamy dwie operacje: FIND(x) - zwraca reprezentantentanta zbioru, do którego należy x, przy czym dla dowolnych różnych elementów tego samego zbioru zwraca te same elementy UNION(x,y) - jeśli x i y należa do innych zbiorów, to łaczy je ze soba

Specyfikacja, 1 2 3 Specyfikacja Mamy poczatkowo n zbiorów (np. po jednym zbiorze na wierzchołek), m zapytań postaci Czy elementy x i y należa do tego samego zbioru (zapytanie odpowiada krawędzi) oraz co najwyżej n 1 operacji scalenia zbiorów. Wyróżniamy dwie operacje: FIND(x) - zwraca reprezentantentanta zbioru, do którego należy x, przy czym dla dowolnych różnych elementów tego samego zbioru zwraca te same elementy UNION(x,y) - jeśli x i y należa do innych zbiorów, to łaczy je ze soba

Specyfikacja, 1 2 3 Specyfikacja Mamy poczatkowo n zbiorów (np. po jednym zbiorze na wierzchołek), m zapytań postaci Czy elementy x i y należa do tego samego zbioru (zapytanie odpowiada krawędzi) oraz co najwyżej n 1 operacji scalenia zbiorów. Wyróżniamy dwie operacje: FIND(x) - zwraca reprezentantentanta zbioru, do którego należy x, przy czym dla dowolnych różnych elementów tego samego zbioru zwraca te same elementy UNION(x,y) - jeśli x i y należa do innych zbiorów, to łaczy je ze soba

1, 1 2 3 1 Mamy tablicę reprezentant[i], której i-ta pozycja zawiera informację o reprezentantentancie zbioru, do którego należy i. Poczatkowo dla każdego i reprezentant[i] == i. Jeśli robimy UNION(i,j), to podmieniamy wszystkie wystapienia wartości reprezentant[j] poprzez reprezentant[i]. Operacja FIND(i) zwraca reprezentant[i].

Cechy rozwiazania 1, 1 2 3 Cechy bardzo szybkie sprawdzanie, czy dane dwa elementy sa w jednym zbiorze O(1) powolne łaczenie dwóch zbiorów O(n) prosta implementacja strasznie duży czas całkowity O(n 2 + m) (wszystkie operacje FIND i UNION)

Cechy rozwiazania 1, 1 2 3 Cechy bardzo szybkie sprawdzanie, czy dane dwa elementy sa w jednym zbiorze O(1) powolne łaczenie dwóch zbiorów O(n) prosta implementacja strasznie duży czas całkowity O(n 2 + m) (wszystkie operacje FIND i UNION)

Cechy rozwiazania 1, 1 2 3 Cechy bardzo szybkie sprawdzanie, czy dane dwa elementy sa w jednym zbiorze O(1) powolne łaczenie dwóch zbiorów O(n) prosta implementacja strasznie duży czas całkowity O(n 2 + m) (wszystkie operacje FIND i UNION)

Cechy rozwiazania 1, 1 2 3 Cechy bardzo szybkie sprawdzanie, czy dane dwa elementy sa w jednym zbiorze O(1) powolne łaczenie dwóch zbiorów O(n) prosta implementacja strasznie duży czas całkowity O(n 2 + m) (wszystkie operacje FIND i UNION)

2, 1 2 3 A jak można szybciej łaczyć? trzymamy jako listy elementów dodatkowo każdy element ma wskaźnik na pierwszy element listy, czyli na reprezentantentanta zawsze pamiętamy rozmiar takiej listy ł aczenie takich dwóch list odbywa się na zasadzie doklej mały do dużego, czyli do większego zbioru doklejamy na koniec mniejszy, i w tym mniejszym zbiorze modyfikujemy wskaźniki na reprezentantentanta

2, 1 2 3 A jak można szybciej łaczyć? trzymamy jako listy elementów dodatkowo każdy element ma wskaźnik na pierwszy element listy, czyli na reprezentantentanta zawsze pamiętamy rozmiar takiej listy ł aczenie takich dwóch list odbywa się na zasadzie doklej mały do dużego, czyli do większego zbioru doklejamy na koniec mniejszy, i w tym mniejszym zbiorze modyfikujemy wskaźniki na reprezentantentanta

2, 1 2 3 A jak można szybciej łaczyć? trzymamy jako listy elementów dodatkowo każdy element ma wskaźnik na pierwszy element listy, czyli na reprezentantentanta zawsze pamiętamy rozmiar takiej listy ł aczenie takich dwóch list odbywa się na zasadzie doklej mały do dużego, czyli do większego zbioru doklejamy na koniec mniejszy, i w tym mniejszym zbiorze modyfikujemy wskaźniki na reprezentantentanta

2, 1 2 3 A jak można szybciej łaczyć? trzymamy jako listy elementów dodatkowo każdy element ma wskaźnik na pierwszy element listy, czyli na reprezentantentanta zawsze pamiętamy rozmiar takiej listy ł aczenie takich dwóch list odbywa się na zasadzie doklej mały do dużego, czyli do większego zbioru doklejamy na koniec mniejszy, i w tym mniejszym zbiorze modyfikujemy wskaźniki na reprezentantentanta

Cechy rozwiazania 2, 1 2 3 Cechy rozwiazania 2 szybki czas sprawdzania, czy dwa elementy należa do jednego zbioru O(1) łaczenie jest szybsze, bo jeśli jakiemuś elementowi podmieniamy wskaźnik na reprezentantentanta, to nagle ten element znajduje się w zbiorze co najmniej dwa razy większym wniosek? każdy element ma podmieniany wskaźnik co najwyżej O(log n) razy cały czas łaczenia wynosi więc O(n log n), więc zamortyzowany czas przeznaczony na jedna operację UNION wynosi O(log n) łaczny czas działania O(n log n + m)

Cechy rozwiazania 2, 1 2 3 Cechy rozwiazania 2 szybki czas sprawdzania, czy dwa elementy należa do jednego zbioru O(1) łaczenie jest szybsze, bo jeśli jakiemuś elementowi podmieniamy wskaźnik na reprezentantentanta, to nagle ten element znajduje się w zbiorze co najmniej dwa razy większym wniosek? każdy element ma podmieniany wskaźnik co najwyżej O(log n) razy cały czas łaczenia wynosi więc O(n log n), więc zamortyzowany czas przeznaczony na jedna operację UNION wynosi O(log n) łaczny czas działania O(n log n + m)

Cechy rozwiazania 2, 1 2 3 Cechy rozwiazania 2 szybki czas sprawdzania, czy dwa elementy należa do jednego zbioru O(1) łaczenie jest szybsze, bo jeśli jakiemuś elementowi podmieniamy wskaźnik na reprezentantentanta, to nagle ten element znajduje się w zbiorze co najmniej dwa razy większym wniosek? każdy element ma podmieniany wskaźnik co najwyżej O(log n) razy cały czas łaczenia wynosi więc O(n log n), więc zamortyzowany czas przeznaczony na jedna operację UNION wynosi O(log n) łaczny czas działania O(n log n + m)

Cechy rozwiazania 2, 1 2 3 Cechy rozwiazania 2 szybki czas sprawdzania, czy dwa elementy należa do jednego zbioru O(1) łaczenie jest szybsze, bo jeśli jakiemuś elementowi podmieniamy wskaźnik na reprezentantentanta, to nagle ten element znajduje się w zbiorze co najmniej dwa razy większym wniosek? każdy element ma podmieniany wskaźnik co najwyżej O(log n) razy cały czas łaczenia wynosi więc O(n log n), więc zamortyzowany czas przeznaczony na jedna operację UNION wynosi O(log n) łaczny czas działania O(n log n + m)

Cechy rozwiazania 2, 1 2 3 Cechy rozwiazania 2 szybki czas sprawdzania, czy dwa elementy należa do jednego zbioru O(1) łaczenie jest szybsze, bo jeśli jakiemuś elementowi podmieniamy wskaźnik na reprezentantentanta, to nagle ten element znajduje się w zbiorze co najmniej dwa razy większym wniosek? każdy element ma podmieniany wskaźnik co najwyżej O(log n) razy cały czas łaczenia wynosi więc O(n log n), więc zamortyzowany czas przeznaczony na jedna operację UNION wynosi O(log n) łaczny czas działania O(n log n + m)

3, 1 2 3 Trzymamy rodzinę zbiorów rozłacznych jako las drzew każdy element oprócz korzenia w drzewie ma wskaźnik do jakiegoś elementu wyżej jeśli jest korzeniem, to ma wskaźnik sam do siebie reprezentantentantem zbioru jest korzeń drzewa scalanie = podpięcie korzenia jednego drzewa do drugiego drzewa

3, 1 2 3 Trzymamy rodzinę zbiorów rozłacznych jako las drzew każdy element oprócz korzenia w drzewie ma wskaźnik do jakiegoś elementu wyżej jeśli jest korzeniem, to ma wskaźnik sam do siebie reprezentantentantem zbioru jest korzeń drzewa scalanie = podpięcie korzenia jednego drzewa do drugiego drzewa

3, 1 2 3 Trzymamy rodzinę zbiorów rozłacznych jako las drzew każdy element oprócz korzenia w drzewie ma wskaźnik do jakiegoś elementu wyżej jeśli jest korzeniem, to ma wskaźnik sam do siebie reprezentantentantem zbioru jest korzeń drzewa scalanie = podpięcie korzenia jednego drzewa do drugiego drzewa

3, 1 2 3 Trzymamy rodzinę zbiorów rozłacznych jako las drzew każdy element oprócz korzenia w drzewie ma wskaźnik do jakiegoś elementu wyżej jeśli jest korzeniem, to ma wskaźnik sam do siebie reprezentantentantem zbioru jest korzeń drzewa scalanie = podpięcie korzenia jednego drzewa do drugiego drzewa

3, 1 2 3 Trzymamy rodzinę zbiorów rozłacznych jako las drzew każdy element oprócz korzenia w drzewie ma wskaźnik do jakiegoś elementu wyżej jeśli jest korzeniem, to ma wskaźnik sam do siebie reprezentantentantem zbioru jest korzeń drzewa scalanie = podpięcie korzenia jednego drzewa do drugiego drzewa

, Zasadniczo wyglada to tak: a e g 1 2 b c f 3 d

po UNION, A jak zrobimy UNION(b,f), to wyglada tak: a g 1 2 b c e 3 d f

Optymalizacja 1, 1 2 3 Ranga dla każdego elementu z każdego zbioru trzymamy rangę, która jest wysokościa drzewa, czyli odległościa najdalszego elementu od korzenia scalanie zbiorów robimy podpinajac do drzewa o większej randze drzewo o mniejszej randze jeśli rangi s a równe, to podpinamy jakkolwiek i zwiększamy rangę w korzeniu drzewa, do którego podpięliśmy

Optymalizacja 1, 1 2 3 Ranga dla każdego elementu z każdego zbioru trzymamy rangę, która jest wysokościa drzewa, czyli odległościa najdalszego elementu od korzenia scalanie zbiorów robimy podpinajac do drzewa o większej randze drzewo o mniejszej randze jeśli rangi s a równe, to podpinamy jakkolwiek i zwiększamy rangę w korzeniu drzewa, do którego podpięliśmy

Optymalizacja 1, 1 2 3 Ranga dla każdego elementu z każdego zbioru trzymamy rangę, która jest wysokościa drzewa, czyli odległościa najdalszego elementu od korzenia scalanie zbiorów robimy podpinajac do drzewa o większej randze drzewo o mniejszej randze jeśli rangi s a równe, to podpinamy jakkolwiek i zwiększamy rangę w korzeniu drzewa, do którego podpięliśmy

Koszt czasowy, 1 2 3 Koszt czasowy w omówionej dotad implementacji koszt czasowy zapytania FIND jest logarytmiczny (warto zastanowić się dlaczego!) koszt operacji UNION to dwie operacje FIND plus czas podmienienia wskaźnika, czyli w sumie logarytmicznie całkowity koszt działania takiej struktury to O(m log n), czyli dość dużo na szczęście jest jeszcze..

Koszt czasowy, 1 2 3 Koszt czasowy w omówionej dotad implementacji koszt czasowy zapytania FIND jest logarytmiczny (warto zastanowić się dlaczego!) koszt operacji UNION to dwie operacje FIND plus czas podmienienia wskaźnika, czyli w sumie logarytmicznie całkowity koszt działania takiej struktury to O(m log n), czyli dość dużo na szczęście jest jeszcze..

Koszt czasowy, 1 2 3 Koszt czasowy w omówionej dotad implementacji koszt czasowy zapytania FIND jest logarytmiczny (warto zastanowić się dlaczego!) koszt operacji UNION to dwie operacje FIND plus czas podmienienia wskaźnika, czyli w sumie logarytmicznie całkowity koszt działania takiej struktury to O(m log n), czyli dość dużo na szczęście jest jeszcze..

Koszt czasowy, 1 2 3 Koszt czasowy w omówionej dotad implementacji koszt czasowy zapytania FIND jest logarytmiczny (warto zastanowić się dlaczego!) koszt operacji UNION to dwie operacje FIND plus czas podmienienia wskaźnika, czyli w sumie logarytmicznie całkowity koszt działania takiej struktury to O(m log n), czyli dość dużo na szczęście jest jeszcze..

Kompresja ścieżek, 1 2 3 Kompresja ścieżek każdy element najlepiej czuje się blisko korzenia, bo wtedy nie trzeba za dużo chodzić po wskaźnikach w operacji FIND skoro już musimy tyle chodzić w operacji FIND, możemy poskracać ścieżki, czyli po prostu wszystkie napotkane na drodze wierzchołki podpiać do korzenia całkowity czas działania struktury to O(m log n), gdzie log n oznacza wysokość stosu potęg dwójek potrzebnych do zbudowania n. Np. log 2 = 1, log 2 2 = 2, log 2 22 = 3,log 2 222 = 4, itd. Wartość 2 2222 = 2 65536 dla zainteresowanych: dowód tego faktu we Wprowadzeniu do algorytmów.

Kompresja ścieżek, 1 2 3 Kompresja ścieżek każdy element najlepiej czuje się blisko korzenia, bo wtedy nie trzeba za dużo chodzić po wskaźnikach w operacji FIND skoro już musimy tyle chodzić w operacji FIND, możemy poskracać ścieżki, czyli po prostu wszystkie napotkane na drodze wierzchołki podpiać do korzenia całkowity czas działania struktury to O(m log n), gdzie log n oznacza wysokość stosu potęg dwójek potrzebnych do zbudowania n. Np. log 2 = 1, log 2 2 = 2, log 2 22 = 3,log 2 222 = 4, itd. Wartość 2 2222 = 2 65536 dla zainteresowanych: dowód tego faktu we Wprowadzeniu do algorytmów.

Kompresja ścieżek, 1 2 3 Kompresja ścieżek każdy element najlepiej czuje się blisko korzenia, bo wtedy nie trzeba za dużo chodzić po wskaźnikach w operacji FIND skoro już musimy tyle chodzić w operacji FIND, możemy poskracać ścieżki, czyli po prostu wszystkie napotkane na drodze wierzchołki podpiać do korzenia całkowity czas działania struktury to O(m log n), gdzie log n oznacza wysokość stosu potęg dwójek potrzebnych do zbudowania n. Np. log 2 = 1, log 2 2 = 2, log 2 22 = 3,log 2 222 = 4, itd. Wartość 2 2222 = 2 65536 dla zainteresowanych: dowód tego faktu we Wprowadzeniu do algorytmów.

Kompresja ścieżek, 1 2 3 Kompresja ścieżek każdy element najlepiej czuje się blisko korzenia, bo wtedy nie trzeba za dużo chodzić po wskaźnikach w operacji FIND skoro już musimy tyle chodzić w operacji FIND, możemy poskracać ścieżki, czyli po prostu wszystkie napotkane na drodze wierzchołki podpiać do korzenia całkowity czas działania struktury to O(m log n), gdzie log n oznacza wysokość stosu potęg dwójek potrzebnych do zbudowania n. Np. log 2 = 1, log 2 2 = 2, log 2 22 = 3,log 2 222 = 4, itd. Wartość 2 2222 = 2 65536 dla zainteresowanych: dowód tego faktu we Wprowadzeniu do algorytmów.

Podsumowanie, 1 2 3 Podsumowanie Korzystajac z przedstawionego algorytmu budowania drzewa rozpinajacego, przy użyciu Rozwiazania 3, do reprezentowania zmieniajacych się w czasie spójnych składowych budujemy drzewo rozpinajace w czasie O(m log m).