Dynamiczne drzewa Marian M. Kędzierski 26 listopada 2009
Plan prezentacji Wstęp 1 Wstęp Zagadnienie dynamicznych drzew SPLITiJOINnadrzewachBST 2 Euler-TourTrees Operacje na ET-drzewach Rozszerzenia 3 Dynamicznaspójność Zagadnienie Algorytm HLT 4 AlgorytmDinica Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). 5 Link-CutTrees
Problem dynamicznych drzew Zagadnienie dynamicznych drzew SPLITiJOINnadrzewachBST Idea Chcemy reprezentować las ukorzenionych, rozłącznych drzew dowolnego stopnia. Jakich operacji oczekujemy? LINK(u,v) podepnijdrzewookorzeniuwvdowierzchołka u innego drzewa CUT(v) odetnijwierzchołekvwrazzjegopoddrzewemod jego ojca FINDROOT(v) podaj korzeń drzewa zawierającego v Jakiej złożoności oczekujemy? Czas: O(log n) na operację(być może zamortyzowany).
Zagadnienie dynamicznych drzew SPLITiJOINnadrzewachBST Pierwsze podejście SPLIT i JOIN na drzewach BST Gdyby: Wystarczałyby nam drzewa binarne
Zagadnienie dynamicznych drzew SPLITiJOINnadrzewachBST Pierwsze podejście SPLIT i JOIN na drzewach BST Gdyby: Wystarczałyby nam drzewa binarne Nie interesowała nas struktura drzewa, tylko zbiór jego wierzchołków
Zagadnienie dynamicznych drzew SPLITiJOINnadrzewachBST Pierwsze podejście SPLIT i JOIN na drzewach BST Gdyby: Wystarczałyby nam drzewa binarne Nie interesowała nas struktura drzewa, tylko zbiór jego wierzchołków to moglibyśmy rozwiązać problem za pomocą lasu zrównoważonych drzew BST.
Zagadnienie dynamicznych drzew SPLITiJOINnadrzewachBST Pierwsze podejście SPLIT i JOIN na drzewach BST Gdyby: Wystarczałyby nam drzewa binarne Nie interesowała nas struktura drzewa, tylko zbiór jego wierzchołków to moglibyśmy rozwiązać problem za pomocą lasu zrównoważonych drzew BST. Pewne drzewa zrównoważone(najłatwiej splay, ale da się także 2-3 drzewa) można wzbogacić o operacje: SPLIT wytnij z drzewa spójny fragment kluczy i podziel drzewo na dwa JOIN połącz dwa drzewa o kluczach z rozłącznych przedziałów
Drzewa ET Wstęp Operacje na ET-drzewach Rozszerzenia Pomysł Reprezentujmy dowolne drzewo przez cykl Eulera na nim.
Drzewa ET Wstęp Operacje na ET-drzewach Rozszerzenia Pomysł Reprezentujmy dowolne drzewo przez cykl Eulera na nim. Dokładniej: niech reprezentacją drzewa będzie zrównoważone drzewo BST zawierające wszystkie węzły tego cyklu Eulera.
Drzewa ET Wstęp Operacje na ET-drzewach Rozszerzenia Pomysł Reprezentujmy dowolne drzewo przez cykl Eulera na nim. Dokładniej: niech reprezentacją drzewa będzie zrównoważone drzewo BST zawierające wszystkie węzły tego cyklu Eulera. Uwagi:
Drzewa ET Wstęp Operacje na ET-drzewach Rozszerzenia Pomysł Reprezentujmy dowolne drzewo przez cykl Eulera na nim. Dokładniej: niech reprezentacją drzewa będzie zrównoważone drzewo BST zawierające wszystkie węzły tego cyklu Eulera. Uwagi: Trzeba rozgraniczyć pojęcie drzewa reprezentowanego od ET-drzewa
Drzewa ET Wstęp Operacje na ET-drzewach Rozszerzenia Pomysł Reprezentujmy dowolne drzewo przez cykl Eulera na nim. Dokładniej: niech reprezentacją drzewa będzie zrównoważone drzewo BST zawierające wszystkie węzły tego cyklu Eulera. Uwagi: Trzeba rozgraniczyć pojęcie drzewa reprezentowanego od ET-drzewa Nie przechowujemy w ogóle jawnie drzewa reprezentowanego
Drzewa ET Wstęp Operacje na ET-drzewach Rozszerzenia Pomysł Reprezentujmy dowolne drzewo przez cykl Eulera na nim. Dokładniej: niech reprezentacją drzewa będzie zrównoważone drzewo BST zawierające wszystkie węzły tego cyklu Eulera. Uwagi: Trzeba rozgraniczyć pojęcie drzewa reprezentowanego od ET-drzewa Nie przechowujemy w ogóle jawnie drzewa reprezentowanego WęzłydrzewaBSTniemająkluczy(!) nie wykonujemy wyszukiwań ale w zastosowaniach potrzebujemy statycznego indeksu {numer wierzchołka węzeł}
Drzewa ET Wstęp Operacje na ET-drzewach Rozszerzenia Pomysł Reprezentujmy dowolne drzewo przez cykl Eulera na nim. Dokładniej: niech reprezentacją drzewa będzie zrównoważone drzewo BST zawierające wszystkie węzły tego cyklu Eulera. Uwagi: Trzeba rozgraniczyć pojęcie drzewa reprezentowanego od ET-drzewa Nie przechowujemy w ogóle jawnie drzewa reprezentowanego WęzłydrzewaBSTniemająkluczy(!) nie wykonujemy wyszukiwań ale w zastosowaniach potrzebujemy statycznego indeksu {numer wierzchołka węzeł} Są dwie wersje ET-drzewa Pełny cykl Eulera Słowo nawiasowe
Drzewa ET operacje Operacje na ET-drzewach Rozszerzenia LINK(u,v) operacjesplitijoinnaet-drzewie CUT(v) podobnie REROOT(v) teżsameoperacjesplitijoin,alesprytniej ROOT(v) zejście lewą/prawą ścieżką w ET-drzewie (pierwszy lub ostatni wierzchołek cyklu)
Drzewa ET statystyki pozycyjne Operacje na ET-drzewach Rozszerzenia Jak rozszerzyć ET-drzewo o statystyki pozycyjne?
Drzewa ET statystyki pozycyjne Operacje na ET-drzewach Rozszerzenia Jak rozszerzyć ET-drzewo o statystyki pozycyjne? Liczba wierzchołków w poddrzewie drzewa reprezentowanego
Drzewa ET statystyki pozycyjne Operacje na ET-drzewach Rozszerzenia Jak rozszerzyć ET-drzewo o statystyki pozycyjne? Liczba wierzchołków w poddrzewie drzewa reprezentowanego Uogólnienie: Suma wag wierzchołków w poddrzewie
Drzewa ET statystyki pozycyjne Operacje na ET-drzewach Rozszerzenia Jak rozszerzyć ET-drzewo o statystyki pozycyjne? Liczba wierzchołków w poddrzewie drzewa reprezentowanego Uogólnienie: Suma wag wierzchołków w poddrzewie Wysokość poddrzewa
Drzewa ET statystyki pozycyjne Operacje na ET-drzewach Rozszerzenia Jak rozszerzyć ET-drzewo o statystyki pozycyjne? Liczba wierzchołków w poddrzewie drzewa reprezentowanego Uogólnienie: Suma wag wierzchołków w poddrzewie Wysokość poddrzewa Minima/Maksima na ścieżkach
Drzewa ET statystyki pozycyjne Operacje na ET-drzewach Rozszerzenia Jak rozszerzyć ET-drzewo o statystyki pozycyjne? Liczba wierzchołków w poddrzewie drzewa reprezentowanego Uogólnienie: Suma wag wierzchołków w poddrzewie Wysokość poddrzewa Minima/Maksima na ścieżkach Niestety,niebardzosiędaje...
Problem dynamicznej spójności Zagadnienie Algorytm HLT Chcemy utrzymywać strukturę grafu nieskierowanego pozwalającą wykonywać zapytania: ADD(u,v) dodajkrawędźu v DELETE(u,v) usuńkrawędźu v CONNECTED(u,v) sprawdź,czywierzchołkiuivsąw tej samej spójnej składowej CONNECTED() sprawdź, czy graf jest spójny
Problem dynamicznej spójności Zagadnienie Algorytm HLT Chcemy utrzymywać strukturę grafu nieskierowanego pozwalającą wykonywać zapytania: ADD(u,v) dodajkrawędźu v DELETE(u,v) usuńkrawędźu v CONNECTED(u,v) sprawdź,czywierzchołkiuivsąw tej samej spójnej składowej CONNECTED() sprawdź, czy graf jest spójny Chcielibyśmy, żeby koszty powyższych operacji wynosiły O(log n)
Pierwsze podejście Wstęp Zagadnienie Algorytm HLT Jeżeli nie wykonujemy operacji DELETE, to możemy użyć drzew Find-Union.
Pierwsze podejście Wstęp Zagadnienie Algorytm HLT Jeżeli nie wykonujemy operacji DELETE, to możemy użyć drzew Find-Union. Niestety operacja DELETE nie daje się sensownie przeprowadzić na tych drzewach wymagałaby właściwie przebudowania struktury od nowa.
Drugie podejście Wstęp Zagadnienie Algorytm HLT Możemy zamiast całych spójnych składowych przechowywać ich pewne drzewa rozpinające.
Drugie podejście Wstęp Zagadnienie Algorytm HLT Możemy zamiast całych spójnych składowych przechowywać ich pewne drzewa rozpinające. Jeżeli te drzewa są reprezentowane jako ET-drzewa, to:
Drugie podejście Wstęp Zagadnienie Algorytm HLT Możemy zamiast całych spójnych składowych przechowywać ich pewne drzewa rozpinające. Jeżeli te drzewa są reprezentowane jako ET-drzewa, to: OperacjęADDłatwowykonaćzapomocąLINK:czas O(log n)
Drugie podejście Wstęp Zagadnienie Algorytm HLT Możemy zamiast całych spójnych składowych przechowywać ich pewne drzewa rozpinające. Jeżeli te drzewa są reprezentowane jako ET-drzewa, to: OperacjęADDłatwowykonaćzapomocąLINK:czas O(log n) Niestety do operacji DELETE nie wystarczy CUT
Drugie podejście Wstęp Zagadnienie Algorytm HLT Możemy zamiast całych spójnych składowych przechowywać ich pewne drzewa rozpinające. Jeżeli te drzewa są reprezentowane jako ET-drzewa, to: OperacjęADDłatwowykonaćzapomocąLINK:czas O(log n) Niestety do operacji DELETE nie wystarczy CUT Ponieważ potrzebujemy sprawdzić, czy nie istnieje tzw. krawędź zastępcza Znalezienie krawędzi zastępczej to czas rzędu O(m)
Zagadnienie Algorytm HLT Właściwe rozwiązanie algorytm HLT Algorytm Holma, de Lichtenberga i Thorupa. Podzielmy krawędzie na poziomy.
Zagadnienie Algorytm HLT Właściwe rozwiązanie algorytm HLT Algorytm Holma, de Lichtenberga i Thorupa. Podzielmy krawędzie na poziomy. Każde bezowocne dotknięcie krawędzi zwiększy jej poziom. Poziomów będzie O(log n).
Zagadnienie Algorytm HLT Właściwe rozwiązanie algorytm HLT Algorytm Holma, de Lichtenberga i Thorupa. Podzielmy krawędzie na poziomy. Każde bezowocne dotknięcie krawędzi zwiększy jej poziom. Poziomów będzie O(log n). NiechG i grafzbudowanyzkrawędziopoziomach i.wtedy G =G 0 G 1 G 2...
Zagadnienie Algorytm HLT Właściwe rozwiązanie algorytm HLT Algorytm Holma, de Lichtenberga i Thorupa. Podzielmy krawędzie na poziomy. Każde bezowocne dotknięcie krawędzi zwiększy jej poziom. Poziomów będzie O(log n). NiechG i grafzbudowanyzkrawędziopoziomach i.wtedy G =G 0 G 1 G 2... NiechF lasrozpinającyg,zaśf i podgraffskładającysię zkrawędziopoziomach i.wtedy: F 0 F 1 F 2...
Zagadnienie Algorytm HLT Właściwe rozwiązanie algorytm HLT Algorytm Holma, de Lichtenberga i Thorupa. Podzielmy krawędzie na poziomy. Każde bezowocne dotknięcie krawędzi zwiększy jej poziom. Poziomów będzie O(log n). NiechG i grafzbudowanyzkrawędziopoziomach i.wtedy G =G 0 G 1 G 2... NiechF lasrozpinającyg,zaśf i podgraffskładającysię zkrawędziopoziomach i.wtedy: F 0 F 1 F 2... Ponadtożądamy,by: T n 2 i dladowolnegodrzewatnależącego dodowolnegolasuf i. Terminologia: Krawędzie z F nazywamy drzewowymi, pozostałe niedrzewowymi.
Zagadnienie Algorytm HLT Poszczególne operacje na strukturze HLT ADD(u,v) koszto(logn)
Zagadnienie Algorytm HLT Poszczególne operacje na strukturze HLT ADD(u,v) koszto(logn) AleobarczamyjądodatkowymkosztemO(log 2 n)
Zagadnienie Algorytm HLT Poszczególne operacje na strukturze HLT ADD(u,v) koszto(logn) AleobarczamyjądodatkowymkosztemO(log 2 n) To na poczet przyszłych O(log n) podniesień poziomu
Zagadnienie Algorytm HLT Poszczególne operacje na strukturze HLT ADD(u,v) koszto(logn) AleobarczamyjądodatkowymkosztemO(log 2 n) To na poczet przyszłych O(log n) podniesień poziomu CONNECTED(u,v) koszto(logn)
Zagadnienie Algorytm HLT Poszczególne operacje na strukturze HLT ADD(u,v) koszto(logn) AleobarczamyjądodatkowymkosztemO(log 2 n) To na poczet przyszłych O(log n) podniesień poziomu CONNECTED(u,v) koszto(logn) CONNECTED() koszt O(1) pamiętamy liczbę spójnych składowych
Zagadnienie Algorytm HLT Poszczególne operacje na strukturze HLT ADD(u,v) koszto(logn) AleobarczamyjądodatkowymkosztemO(log 2 n) To na poczet przyszłych O(log n) podniesień poziomu CONNECTED(u,v) koszto(logn) CONNECTED() koszt O(1) pamiętamy liczbę spójnych składowych DELETE(u, v)
Zagadnienie Algorytm HLT Poszczególne operacje na strukturze HLT ADD(u,v) koszto(logn) AleobarczamyjądodatkowymkosztemO(log 2 n) To na poczet przyszłych O(log n) podniesień poziomu CONNECTED(u,v) koszto(logn) CONNECTED() koszt O(1) pamiętamy liczbę spójnych składowych DELETE(u,v) najbardziejproblematyczna...
Zagadnienie Algorytm HLT Usunięcie krawędzi ze struktury HLT Najpierw sprawdzamy poziom krawędzi(przyda nam się tu dodatkowa kopia całego grafu, gdzie krawędzie będą etykietowane poziomami). Oznaczmy ten poziom jako l.
Zagadnienie Algorytm HLT Usunięcie krawędzi ze struktury HLT Najpierw sprawdzamy poziom krawędzi(przyda nam się tu dodatkowa kopia całego grafu, gdzie krawędzie będą etykietowane poziomami). Oznaczmy ten poziom jako l. Jeżeli krawędź była niedrzewowa, to wystarczy usunąć koszt wszystkiego O(log n)
Zagadnienie Algorytm HLT Usunięcie krawędzi ze struktury HLT Najpierw sprawdzamy poziom krawędzi(przyda nam się tu dodatkowa kopia całego grafu, gdzie krawędzie będą etykietowane poziomami). Oznaczmy ten poziom jako l. Jeżeli krawędź była niedrzewowa, to wystarczy usunąć koszt wszystkiego O(log n) Wpp. musimy:
Zagadnienie Algorytm HLT Usunięcie krawędzi ze struktury HLT Najpierw sprawdzamy poziom krawędzi(przyda nam się tu dodatkowa kopia całego grafu, gdzie krawędzie będą etykietowane poziomami). Oznaczmy ten poziom jako l. Jeżeli krawędź była niedrzewowa, to wystarczy usunąć koszt wszystkiego O(log n) Wpp. musimy: WykonaćCUTnawszystkichlasachF 0,F 1,...,F l czaso(log 2 n)
Zagadnienie Algorytm HLT Usunięcie krawędzi ze struktury HLT Najpierw sprawdzamy poziom krawędzi(przyda nam się tu dodatkowa kopia całego grafu, gdzie krawędzie będą etykietowane poziomami). Oznaczmy ten poziom jako l. Jeżeli krawędź była niedrzewowa, to wystarczy usunąć koszt wszystkiego O(log n) Wpp. musimy: WykonaćCUTnawszystkichlasachF 0,F 1,...,F l czaso(log 2 n) Znaleźć krawędź zastępczą
Zagadnienie Algorytm HLT Usunięcie krawędzi ze struktury HLT Najpierw sprawdzamy poziom krawędzi(przyda nam się tu dodatkowa kopia całego grafu, gdzie krawędzie będą etykietowane poziomami). Oznaczmy ten poziom jako l. Jeżeli krawędź była niedrzewowa, to wystarczy usunąć koszt wszystkiego O(log n) Wpp. musimy: WykonaćCUTnawszystkichlasachF 0,F 1,...,F l czaso(log 2 n) Znaleźć krawędź zastępczą KoszttejoperacjitoO(log 2 n).
Zagadnienie Algorytm HLT HLT szukanie krawędzi zastępczej w operacji DELETE Nie może istnieć krawędź zastępcza o wyższym poziomie niż l
Zagadnienie Algorytm HLT HLT szukanie krawędzi zastępczej w operacji DELETE Nie może istnieć krawędź zastępcza o wyższym poziomie niż l Musimy wybrać krawędź zastępczą o najwyższym poziomie
Zagadnienie Algorytm HLT HLT szukanie krawędzi zastępczej w operacji DELETE Nie może istnieć krawędź zastępcza o wyższym poziomie niż l Musimy wybrać krawędź zastępczą o najwyższym poziomie Szukamywięcjejkolejnonapoziomachl,l 1,l 2,...
Zagadnienie Algorytm HLT HLT szukanie krawędzi zastępczej w operacji DELETE Nie może istnieć krawędź zastępcza o wyższym poziomie niż l Musimy wybrać krawędź zastępczą o najwyższym poziomie Szukamywięcjejkolejnonapoziomachl,l 1,l 2,... Krawędź zastępczą szukamy przeglądając wszystkie krawędzie wpodgrafierozpinanymprzezmniejszedrzewot 1 zdwóchdrzew T 1,T 2 powstałychzrozpaduoryginalnegodrzewat.
Zagadnienie Algorytm HLT HLT szukanie krawędzi zastępczej w operacji DELETE Nie może istnieć krawędź zastępcza o wyższym poziomie niż l Musimy wybrać krawędź zastępczą o najwyższym poziomie Szukamywięcjejkolejnonapoziomachl,l 1,l 2,... Krawędź zastępczą szukamy przeglądając wszystkie krawędzie wpodgrafierozpinanymprzezmniejszedrzewot 1 zdwóchdrzew T 1,T 2 powstałychzrozpaduoryginalnegodrzewat. Jeżeli dana krawędź nie jest zastępcza to podnosimy jej poziom
Zagadnienie Algorytm HLT HLT szukanie krawędzi zastępczej w operacji DELETE Nie może istnieć krawędź zastępcza o wyższym poziomie niż l Musimy wybrać krawędź zastępczą o najwyższym poziomie Szukamywięcjejkolejnonapoziomachl,l 1,l 2,... Krawędź zastępczą szukamy przeglądając wszystkie krawędzie wpodgrafierozpinanymprzezmniejszedrzewot 1 zdwóchdrzew T 1,T 2 powstałychzrozpaduoryginalnegodrzewat. Jeżeli dana krawędź nie jest zastępcza to podnosimy jej poziom(możemy to zrobić teoretycznie dla wszystkich krawędzi w badanym podgrafie, bo jego rozmiar nie przekracza n 2 i+1 )
Zagadnienie Algorytm HLT HLT szukanie krawędzi zastępczej w operacji DELETE Nie może istnieć krawędź zastępcza o wyższym poziomie niż l Musimy wybrać krawędź zastępczą o najwyższym poziomie Szukamywięcjejkolejnonapoziomachl,l 1,l 2,... Krawędź zastępczą szukamy przeglądając wszystkie krawędzie wpodgrafierozpinanymprzezmniejszedrzewot 1 zdwóchdrzew T 1,T 2 powstałychzrozpaduoryginalnegodrzewat. Jeżeli dana krawędź nie jest zastępcza to podnosimy jej poziom(możemy to zrobić teoretycznie dla wszystkich krawędzi w badanym podgrafie, bo jego rozmiar nie przekracza n ) 2 i+1 Jeżeli dana krawędź jest zastępcza, to kończymy wyszukiwanie
Zagadnienie Algorytm HLT HLT szukanie krawędzi zastępczej w operacji DELETE Nie może istnieć krawędź zastępcza o wyższym poziomie niż l Musimy wybrać krawędź zastępczą o najwyższym poziomie Szukamywięcjejkolejnonapoziomachl,l 1,l 2,... Krawędź zastępczą szukamy przeglądając wszystkie krawędzie wpodgrafierozpinanymprzezmniejszedrzewot 1 zdwóchdrzew T 1,T 2 powstałychzrozpaduoryginalnegodrzewat. Jeżeli dana krawędź nie jest zastępcza to podnosimy jej poziom(możemy to zrobić teoretycznie dla wszystkich krawędzi w badanym podgrafie, bo jego rozmiar nie przekracza n ) 2 i+1 Jeżeli dana krawędź jest zastępcza, to kończymy wyszukiwanie Kiedy znajdziemy krawędź zastępczą, to:
Zagadnienie Algorytm HLT HLT szukanie krawędzi zastępczej w operacji DELETE Nie może istnieć krawędź zastępcza o wyższym poziomie niż l Musimy wybrać krawędź zastępczą o najwyższym poziomie Szukamywięcjejkolejnonapoziomachl,l 1,l 2,... Krawędź zastępczą szukamy przeglądając wszystkie krawędzie wpodgrafierozpinanymprzezmniejszedrzewot 1 zdwóchdrzew T 1,T 2 powstałychzrozpaduoryginalnegodrzewat. Jeżeli dana krawędź nie jest zastępcza to podnosimy jej poziom(możemy to zrobić teoretycznie dla wszystkich krawędzi w badanym podgrafie, bo jego rozmiar nie przekracza n ) 2 i+1 Jeżeli dana krawędź jest zastępcza, to kończymy wyszukiwanie Kiedy znajdziemy krawędź zastępczą, to: musimy ją dodać na jej poziomie i wszystkich niższych
Zagadnienie Algorytm HLT HLT szukanie krawędzi zastępczej w operacji DELETE Nie może istnieć krawędź zastępcza o wyższym poziomie niż l Musimy wybrać krawędź zastępczą o najwyższym poziomie Szukamywięcjejkolejnonapoziomachl,l 1,l 2,... Krawędź zastępczą szukamy przeglądając wszystkie krawędzie wpodgrafierozpinanymprzezmniejszedrzewot 1 zdwóchdrzew T 1,T 2 powstałychzrozpaduoryginalnegodrzewat. Jeżeli dana krawędź nie jest zastępcza to podnosimy jej poziom(możemy to zrobić teoretycznie dla wszystkich krawędzi w badanym podgrafie, bo jego rozmiar nie przekracza n ) 2 i+1 Jeżeli dana krawędź jest zastępcza, to kończymy wyszukiwanie Kiedy znajdziemy krawędź zastępczą, to: musimy ją dodać na jej poziomie i wszystkich niższych Stąd mamy O(log n) operacji LINK.
HLT podsumowanie Zagadnienie Algorytm HLT Koszt(zamortyzowany) poszczególnych operacji: ADD(u,v),DELETE(u,v):O(log 2 n) CONNECTED(u, v): O(log n) CONNECTED: O(1)
Przypomnienie Wstęp Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). W algorytmie Dinica szukamy ścieżki powiększające paczkami, składającymi się z maksymalnego zbioru najkrótszych ścieżek powiększających
Przypomnienie Wstęp Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). W algorytmie Dinica szukamy ścieżki powiększające paczkami, składającymi się z maksymalnego zbioru najkrótszych ścieżek powiększających każda paczka to jeden przepływ blokujący.
Przypomnienie Wstęp Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). W algorytmie Dinica szukamy ścieżki powiększające paczkami, składającymi się z maksymalnego zbioru najkrótszych ścieżek powiększających każda paczka to jeden przepływ blokujący. Odległość ujścia od źródła rośnie po każdym przepływie blokującym, więc musimy go szukać O(n) razy.
Przypomnienie Wstęp Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). W algorytmie Dinica szukamy ścieżki powiększające paczkami, składającymi się z maksymalnego zbioru najkrótszych ścieżek powiększających każda paczka to jeden przepływ blokujący. Odległość ujścia od źródła rośnie po każdym przepływie blokującym, więc musimy go szukać O(n) razy. Przepływu blokującego szukamy w tzw. sieci warstwowej przy użyciu pary operacji: ADVANCE RETREAT
Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). Jak znajdować przepływ blokujący szybciej? Jak znajdować przepływ blokujący szybciej? Wykorzystajmy informacje, które w podstawowej wersji algorytmu Dinica gubimy
Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). Jak znajdować przepływ blokujący szybciej? Jak znajdować przepływ blokujący szybciej? Wykorzystajmy informacje, które w podstawowej wersji algorytmu Dinica gubimy informacje o częściowych ścieżkach powiększających.
Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). Jak znajdować przepływ blokujący szybciej? Jak znajdować przepływ blokujący szybciej? Wykorzystajmy informacje, które w podstawowej wersji algorytmu Dinica gubimy informacje o częściowych ścieżkach powiększających. Te ścieżki tworzą las!
Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). Jak znajdować przepływ blokujący szybciej? Jak znajdować przepływ blokujący szybciej? Wykorzystajmy informacje, które w podstawowej wersji algorytmu Dinica gubimy informacje o częściowych ścieżkach powiększających. Te ścieżki tworzą las! Reprezentujmy więc ten las za pomocą ET-drzew.
Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). Jak znajdować przepływ blokujący szybciej? Jak znajdować przepływ blokujący szybciej? Wykorzystajmy informacje, które w podstawowej wersji algorytmu Dinica gubimy informacje o częściowych ścieżkach powiększających. Te ścieżki tworzą las! Reprezentujmy więc ten las za pomocą ET-drzew. Operacje ADVANCE i RETREAT odpowiednio zmienią postać.
Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). Jak znajdować przepływ blokujący szybciej? Jak znajdować przepływ blokujący szybciej? Wykorzystajmy informacje, które w podstawowej wersji algorytmu Dinica gubimy informacje o częściowych ścieżkach powiększających. Te ścieżki tworzą las! Reprezentujmy więc ten las za pomocą ET-drzew. Operacje ADVANCE i RETREAT odpowiednio zmienią postać. Ale żeby znaleźć przepływ blokujący w czasie O(m log n) musimy umieć wzbogacić drzewa o wagi na krawędziach/wierzchołkach i umieć wykonywać szybko(w czasie O(log n)) operacje: COST ADDCOST MIN
Przypomnienie idei przepływów blokujących Znajdowanie przepływu blokującego w czasie O(m log n). Jak znajdować przepływ blokujący szybciej? Jak znajdować przepływ blokujący szybciej? Wykorzystajmy informacje, które w podstawowej wersji algorytmu Dinica gubimy informacje o częściowych ścieżkach powiększających. Te ścieżki tworzą las! Reprezentujmy więc ten las za pomocą ET-drzew. Operacje ADVANCE i RETREAT odpowiednio zmienią postać. Ale żeby znaleźć przepływ blokujący w czasie O(m log n) musimy umieć wzbogacić drzewa o wagi na krawędziach/wierzchołkach i umieć wykonywać szybko(w czasie O(log n)) operacje: COST ADDCOST MIN niestety ET-drzewa na to nie pozwalają
Drzewa Link-Cut Alternatywna struktura dla drzew dynamicznych Jest trudniejsza,
Drzewa Link-Cut Alternatywna struktura dla drzew dynamicznych Jest trudniejsza, zamortyzowana,
Drzewa Link-Cut Alternatywna struktura dla drzew dynamicznych Jest trudniejsza, zamortyzowana, ale więcej da się nią zrobić!
Drzewa Link-Cut Alternatywna struktura dla drzew dynamicznych Jest trudniejsza, zamortyzowana, ale więcej da się nią zrobić! Idea Znów nie przechowujemy drzew jawnie w pamięci, tylko zamiast nich pamiętamy ich pewną dekompozycję na ścieżki. Tak jak w drzewach splay przy każdej operacji ściągamy do korzenia żądany wierzchołek, tak teraz będziemy zmieniać dekompozycję ścieżkową, aby żądany wierzchołek był na drugim końcu ścieżki zaczynającej się w korzeniu.
Drzewa Link-Cut Alternatywna struktura dla drzew dynamicznych Jest trudniejsza, zamortyzowana, ale więcej da się nią zrobić! Idea Znów nie przechowujemy drzew jawnie w pamięci, tylko zamiast nich pamiętamy ich pewną dekompozycję na ścieżki. Tak jak w drzewach splay przy każdej operacji ściągamy do korzenia żądany wierzchołek, tak teraz będziemy zmieniać dekompozycję ścieżkową, aby żądany wierzchołek był na drugim końcu ścieżki zaczynającej się w korzeniu. Czyni to operacja ACCESS Zmiana dekompozycji ścieżkowej ściślej oznacza zmianę tzw. preferowanych synów
Budowa drzewa Link-Cut Każdy wierzchołek reprezentowanego drzewa ma co najwyżej jednego preferowanego syna. Jest to ten syn, w którego poddrzewie znajduje się ostatnio dotknięty wierzchołek.
Budowa drzewa Link-Cut Każdy wierzchołek reprezentowanego drzewa ma co najwyżej jednego preferowanego syna. Jest to ten syn, w którego poddrzewie znajduje się ostatnio dotknięty wierzchołek. Preferowane krawędzie tworzą dekompozycję ścieżkową.
Budowa drzewa Link-Cut Każdy wierzchołek reprezentowanego drzewa ma co najwyżej jednego preferowanego syna. Jest to ten syn, w którego poddrzewie znajduje się ostatnio dotknięty wierzchołek. Preferowane krawędzie tworzą dekompozycję ścieżkową. Czym są ścieżki? Są to drzewa splay o kluczach będących głębokościami poszczególnych wierzchołków w reprezentowanym drzewie.
Budowa drzewa Link-Cut Każdy wierzchołek reprezentowanego drzewa ma co najwyżej jednego preferowanego syna. Jest to ten syn, w którego poddrzewie znajduje się ostatnio dotknięty wierzchołek. Preferowane krawędzie tworzą dekompozycję ścieżkową. Czym są ścieżki? Są to drzewa splay o kluczach będących głębokościami poszczególnych wierzchołków w reprezentowanym drzewie. Każdy korzeń drzewa splay ma wskaźnik do swojego ojca w reprezentowanym drzewie.
Budowa drzewa Link-Cut Każdy wierzchołek reprezentowanego drzewa ma co najwyżej jednego preferowanego syna. Jest to ten syn, w którego poddrzewie znajduje się ostatnio dotknięty wierzchołek. Preferowane krawędzie tworzą dekompozycję ścieżkową. Czym są ścieżki? Są to drzewa splay o kluczach będących głębokościami poszczególnych wierzchołków w reprezentowanym drzewie. Każdy korzeń drzewa splay ma wskaźnik do swojego ojca w reprezentowanym drzewie. Drzewo Link-Cut jest w pewnym sensie drzewem drzew typu splay.
Operacje na drzewach Link-Cut Działanie operacji ACCESS(v) Najpierw odcina wierzchołek od ścieżki poniżej niego
Operacje na drzewach Link-Cut Działanie operacji ACCESS(v) Najpierw odcina wierzchołek od ścieżki poniżej niego Potem przebiega po kolejnych ścieżkach od v do korzenia łączącjezesobą.
Operacje na drzewach Link-Cut Działanie operacji ACCESS(v) Najpierw odcina wierzchołek od ścieżki poniżej niego Potem przebiega po kolejnych ścieżkach od v do korzenia łączącjezesobą. Na końcu wykonuje splay(v).
Operacje na drzewach Link-Cut Działanie operacji ACCESS(v) Najpierw odcina wierzchołek od ścieżki poniżej niego Potem przebiega po kolejnych ścieżkach od v do korzenia łączącjezesobą. Na końcu wykonuje splay(v). Inne operacje ROOT(v) najpierw ACCESS(v), potem należy zejść lewą ścieżką głównego drzewa splay(tego w korzeniu)
Operacje na drzewach Link-Cut Działanie operacji ACCESS(v) Najpierw odcina wierzchołek od ścieżki poniżej niego Potem przebiega po kolejnych ścieżkach od v do korzenia łączącjezesobą. Na końcu wykonuje splay(v). Inne operacje ROOT(v) najpierw ACCESS(v), potem należy zejść lewą ścieżką głównego drzewa splay(tego w korzeniu) CUT(v) najpierwaccess(v),potemodcinamyvodjego lewego poddrzewa
Operacje na drzewach Link-Cut Działanie operacji ACCESS(v) Najpierw odcina wierzchołek od ścieżki poniżej niego Potem przebiega po kolejnych ścieżkach od v do korzenia łączącjezesobą. Na końcu wykonuje splay(v). Inne operacje ROOT(v) najpierw ACCESS(v), potem należy zejść lewą ścieżką głównego drzewa splay(tego w korzeniu) CUT(v) najpierwaccess(v),potemodcinamyvodjego lewego poddrzewa LINK(u,v) najpierwaccess(u)iaccess(v) i podpinamy jedno drzewo pod drugie
Wagi w wierzchołkach Żeby obsługiwać operacje COST, MIN oraz ADDCOST moglibyśmy przechowywać cost(v) oraz mincost(v)(minimalny COSTwpoddrzewiev)dlakażdegowierzchołkav.
Wagi w wierzchołkach Żeby obsługiwać operacje COST, MIN oraz ADDCOST moglibyśmy przechowywać cost(v) oraz mincost(v)(minimalny COSTwpoddrzewiev)dlakażdegowierzchołkav. AlewtedynieudanamsięzrobićADDCOSTszybko.
Wagi w wierzchołkach Żeby obsługiwać operacje COST, MIN oraz ADDCOST moglibyśmy przechowywać cost(v) oraz mincost(v)(minimalny COSTwpoddrzewiev)dlakażdegowierzchołkav. AlewtedynieudanamsięzrobićADDCOSTszybko. Zamiast tego przechowujmy dla każdego wierzchołka: cost =cost(v) cost(p(v)) min =cost(v) mincost(v) Dzięki temu po operacji ACCESS(v) mamy prawie gotowy wynik powyższych zapytań, a operacja ADDCOST wymaga tylko zmiany wartości w korzeniu.
Analiza złożoności drzew Link-Cut Analiza drzew Link-Cut jest podobna do analizy drzew splay i dosyć techniczna. Każda z operacji wykonuje się w zamortyzowanym czasie O(log n).
Bibliografia Wstęp Daniel D. Sleator, Robert Endre Tarjan, A Data Structure for Dynamic Trees, Bell Laboratories, Murray Hill, New Jersey 07974, 8.05.1982 theory.csail.mit.edu/classes/6.897/spring05/lec/lec05.pdf www.mimuw.edu.pl/ kowalik/teach/zsd/link-cut.pdf www.mimuw.edu.pl/ mucha/teaching/zsd2006/zsd12.pdf