• Nie Znaleziono Wyników

Przeszukiwanie grafów

N/A
N/A
Protected

Academic year: 2021

Share "Przeszukiwanie grafów"

Copied!
17
0
0

Pełen tekst

(1)

Przeszukiwanie grafów

Wiedza o istnieniu interesuj ¾acego nas obiektu (np. drzewa spinaj ¾acego) jest w praktycznych zastosowaniach ma÷o przydatna. Na ogó÷potrzebujemy informacji o sposobie znalezienia tego obiektu, czyli potrzebujemy odpowiedniego algorytmu. Jednak algorytm, którego czas dzi- a÷ania wynosi 1000 lat, jest umiarkowanie przydatny. Potrzebne s ¾a wi ¾ec metody pozwalaj ¾ace stwierdzi´c, który ze znanych algorytmów jest szybszy, a przynajmniej takie które pozwalaj ¾a oceni´c, czy algorytm jest wystarczaj ¾aco szybki dla naszych potrzeb. Interesuje nas zatem czas dzia÷ania algorytmu. Jest on oczywi´scie zale·zny od rozmiaru danych wej´sciowych.

Jednak nawet przy tym samym rozmiarze danych, czas pracy algorytmu mo·ze by´c znacz ¾aco ró·zny. Nas b ¾edzie interesowa´c pesymistyczny czas dzia÷ania, czyli najd÷u·zszy mo·zliwy czas dzia÷ania dla danych wej´sciowych okre´slonego rozmiaru. B ¾edziemy przy tym zak÷ada´c, ze wprowadzamy dane jednego typu, czyli rozmiar danych wej´sciowych mo·· zna okre´sli´c jedn ¾a liczb ¾a n (w ogólnym przypadku rozwa·zania s ¾a podobne). W praktyce nie b ¾edziemy wyznacza´c dok÷adnego czasu T (n), a jedynie b ¾edziemy szuka´c dobrego oszacowania górnego.

Obliczenie czasu dzia÷ania algorytmu polega na zsumowaniu czasu dzia÷ania wszystkich prostych (elementarnych) instrukcji, takich jak przypisanie warto´sci (i := i + 1), porównanie (if a > 0 then. . . ), czy wywo÷anie procedury. Algorytm zawiera pewn ¾a liczb ¾e instrukcji prostych, przy czym niektóre z nich s ¾a wykonywane wielokrotnie w p ¾etli. Czasy poszczegól- nych instrukcji prostych, zwane te·z ich kosztami, oznaczmy przez c1; : : : ; ck. Zast ¾epuj ¾ac koszty poszczególnych instrukcji najwi ¾ekszym z nich c = max fc1; : : : ; ckg dostajemy osza- cowanie czasu T (n) pewn ¾a funkcj ¾a f (n), której wspó÷czynniki zale·z ¾a od c.

Rozwa·zmy przyk÷adowo algorytm znajdowania maksimum n liczb. Dane wej´sciowe stanowi tablica a = [a[1]; ; : : : ; a[n]].

Maksimum(a) % koszt krotno´s´c

x := a[1] % c1 1

fori := 2 to n do % c2 n 1 if a[i] > x then % c3 n 1

x := a[i] % c1 n 1

max := x % c4 1

Z powy·zszej (uproszczonej) analizy algorytmu wynika, ·ze pesymistyczny czas jego dzia÷ania mo·zna oszacowa´c nast ¾epuj ¾aco:

T (n) = c1+ (n 1) c2+ (n 1) c3+ (n 1) c1+ c3

c + (n 1) c + (n 1) c + (n 1) c + c = 3cn c, czyli czas dzia÷ania jest ograniczony z góry przez funkcj ¾e f (n) = 3cn c.

1

(2)

Zauwa·zmy, ·ze problemy z czasem dzia÷ania algorytmu mog ¾a si ¾e pojawi´c przy du·zym rozmi- arze danych wej´sciowych. Oznacza to, ·ze interesuj ¾ace s ¾a dla nas nie tyle konkretne warto´sci ograniczaj ¾acej funkcji f (n), co zachowanie przy n ! 1, czyli jej w÷asno´sci asymptoty- czne. Badanie w÷asno´sci asyptotycznych funkcji f b ¾edzie polega÷o na porównaniu jej z pewn ¾a funkcj ¾a g > 0, której w÷asno´sci s ¾a nam znane. Pojawia si ¾e pytanie, jak porówna´c asympto- tyczne w÷asno´sci funkcji f oraz g. Polega to, mówi ¾ac w uproszczeniu, na zbadaniu granicy

A = lim

n!1

f (n) g (n).

Je·zeli A jest liczb ¾a dodatni ¾a, to uwa·zamy, ·ze funkcje te s ¾a "asymptotycznie podobne", je·zeli A = 0, to f jest "asymptotycznie mniejsza", za´s je´sli A = 1, to f jest "asymptotycznie wi ¾eksza" ni·z g. Przyjmuj ¾ac np. g (n) = n, w rozwa·zanym przyk÷adzie dostajemy

n!1lim f (n)

g (n) = 3c2 (0; 1) ,

czyli f i g s ¾a "asymptotycznie podobne". Takie podej´scie pozwala na uproszczenie rozwa·za´n przez pomini ¾ecie w rozwa·zaniach kosztu c, który nie wp÷ywa na asymptotyczne w÷asno´sci funkcji. Dok÷adniej, przyjmujemy c = 1, co sprawia, ·ze funkcja f (n) szacuje ilo´s´c instrukcji prostych w algorytmie, czyli z÷o·zono´s´c obliczeniow ¾a algorytmu. W ostatnim przyk÷adzie mamy f (n) = 3cn c = 3n 1.

Sprowadzili´smy rozwa·zania dotycz ¾ace czasu dzia÷ania algorytmu do badania jego (pesymisty- cznej, asymptotycznej) z÷o·zono´sci obliczeniowej. Zde…niujemy teraz formalnie poj ¾ecia pozwala- j ¾ace opisa´c z÷o·zono´s´c obliczeniow ¾a algorytmu.

Dla k 2 N oznaczmy Nk = fn 2 N; n kg i za÷ó·zmy, ·ze f; g : Nk ! R+. Mówimy, ·ze funkcja g (n) jest asymptotycznym ograniczeniem górnym funkcji f (n) lub ·ze f (n) jest rz ¾edu co najwy·zej g (n) je·zeli

lim sup

n!1

f (n) g (n) <1.

Zbiór takich funkcji f (n), dla których g (n) jest asymptotycznym ograniczeniem górnym oz- naczamy O (g (n)). Zamiast pisa´c f (n) 2 O (g (n)) b ¾edziemy, zgodnie z przyj ¾etymi zwycza- jami, pisa´c

f (n) = O (g (n)). Przyj ¾ete oznaczenia nazywamy notacj ¾a O(wielkie O).

Cwiczenie 1.´ Pokaza´c, ·ze

f (n) = O (g (n)), 9c>0 9n02N 8n n0 f (n) cg (n) .

Funkcja g (n) pe÷ni w podanej de…nicji rol ¾e wzorca, do którego porównujemy funkcj ¾e f (n). Dlatego jako g (n) b ¾edziemy przyjmowa´c na ogó÷funkcje: 1 (sta÷a), ln n, n, 2n oraz iloczyny tych funkcji. Przyk÷adowo, funkcj ¾e f (n) nazywamy ograniczon ¾a wielomianowo je´sli f (n) = O nk dla pewnej liczby naturalnej k.

Cwiczenie 2.´ Pokaza´c, ·ze dla dowolnych funkcji f; g; h : Nk! R+

(3)

(1) f (n) = O (f (n)).

(2) Je·zeli f (n) = O (g (n)) i g (n) = O (h (n)), to f (n) = O (h (n)).

Cwiczenie 3.´ Znale´z´c funkcje takie, ·ze

(1) f (n) = O (g (n)) oraz g (n) 6= O (f (n)) (czyli g (n) =2 O (f (n))).

(2) f (n) 6= O (g (n)) oraz g (n) 6= O (f (n)).

(3) f (n) = O (g (n)), g (n) = O (f (n)) oraz f 6= g.

Cwiczenie 4.´ W zbiorze funkcji z Nk w R+ mo·zemy wprowadzi´c relacj ¾e przyjmuj ¾ac f g , f (n) = O (g (n)) :

Jakie w÷asno´sci ma relacja ?

Cwiczenie 5.´ Udowodni´c, ·ze dla dowolnej liczby a > 0

n!1lim lnan

n = lim

n!1

na 2n = 0.

Cwiczenie 6.´ Sprawdzi´c prawdziwo´s´c warunków 1) n = O (n3) ; 10) ln5n = O (p

n) ; 19) 2n+ 3n= O (3n) ; 2) n2 = O (n3) ; 11) ln n5 = O (ln n) ; 20) n2n = O (3n) ; 3) n3 = O (n2) ; 12) ln5n = O (ln n) ; 21) 5n= O (n!) ; 4) n3 = O (5n3 + 4n2 + 3n + 2) ; 13) ln n = O (log2n) ; 22) n! = O (5n) ; 5) 5n3+ 4n2+ 3n + 2 = O (n3) ; 14) ln n = O (log10n) ; 23) ln 2n = O (n) ; 6) n +p

n = O (n) ; 15) ln n = O (ln ln n) ; 24) ln n! = O (n) ; 7) np

n = O (n) ; 16) n5 = O (2n) ; 25) ln n! = O (n ln n) ; 8) p

n = O (ln n) ; 17) 2n= O (n5) ; 26) ln n! = O (n2) ; 9) ln n = O (p

n) ; 18) 4n= O (2n+ 3n) ; 27) nn = O (n!) :

Oprócz notacji O stosowane s ¾a równie·z inne sposoby porównywania funkcji. Wspomnimy o jeszcze jednym zwanym notacj ¾a (wielkie theta). Mówimy, ·ze funkcja g (n) jest asymp- totycznie dok÷adnym oszacowaniem funkcji f (n) lub ·ze f (n) jest rz ¾edu g (n) je·zeli

0 < lim inf

n!1

f (n)

g (n) lim sup

n!1

f (n) g (n) <1.

Piszemy wtedy f (n) = (g (n)).

Cwiczenie 7.´ Udowodni´c, ·ze dla dowolnych funkcji f; g; h : Nk! R+ (1) f (n) = (g (n)), f (n) = O (g (n)) ^ g (n) = O (f (n)).

(2) f (n) = (f (n)).

(3) f (n) = (g (n))) g (n) = (f (n)).

(4) Je·zeli f (n) = (g (n)) i g (n) = (h (n)), to f (n) = (h (n)).

Cwiczenie 8.´ Sprawdzi´c prawdziwo´s´c warunków z ´cwiczenia 6, po zast ¾apieniu notacji O notacj ¾a .

(4)

Uwaga 1. De…nicje dotycz ¾ace porównywania funkcji mo·zna bez ·zadnych zmian sformu÷owa´c dla funkcji okre´slonych na pó÷prostej (a; 1), a > 0 zamiast na zbiorze Nk (jedynie dla wi ¾ekszej czytelno´sci warto zmienn ¾a n zast ¾api´c przez x).

Uwaga 2. Zapisuj ¾ac z÷o·zono´s´c obliczeniow ¾a algorytmu upraszcza si ¾e zapis przez opuszcze- nie symbolu mocy zbioru j j, tzn. pisze si ¾e np. O (V2) i O (V ln V ) zamiast O jV j2 i O (jV j ln jV j).

Zanim przejdziemy do omawiania konkretnych algorytmów, zwró´cmy jeszcze uwag ¾e na is- totny problem wyst ¾epuj ¾acy gdy próbujemy oceni´c z÷o·zono´s´c obliczeniow ¾a algorytmu napisanego w pseudokodzie. Problem polega na tym, ·ze czasem nie da si ¾e ustali´c, czy dan ¾a instrukcj ¾e mo·zemy potraktowa´c jako elementarn ¾a, czy te·z do jej wykonania potrzeba wi ¾ekszej ilo´sci instrukcji elementarnych. Przyk÷adowo instrukcja przypisania odwo÷uj ¾aca si ¾e do elementu tablicy mo·ze by´c potraktowana jako elementarna, gdy·z mo·zemy si ¾e odwo÷a´c bezpo´srednio do dowolnego elementu tablicy. Je·zeli jednak dane s ¾a zorganizowane nie w postaci tablicy, ale listy, to odwo÷anie do elementu listy wymaga odwo÷ania si ¾e do wszystkich go poprzedzaj ¾acych.

Tak wi ¾ec analogiczna instrukcja przypisania wymaga wi ¾ekszej ilo´sci instrukcji elementarnych.

Przyk÷ad ten pokazuje, ·ze na ogó÷z÷o·zono´s´c obliczeniow ¾a mo·zemy policzy´c dla konkret- nej implementacji algorytmu, a nie dla samego algorytmu. Z tego te·z wzgl ¾edu w naszym wyk÷adzie b ¾edziemy ogranicza´c si ¾e do podawania informacji o z÷o·zono´sci obliczeniowej jak ¾a mo·zna uzyska´c implementuj ¾ac dany algorytm. Nie b ¾edziemy raczej bada´c tego samodzielnie.

W twierdzeniu ?? udowodnili´smy, ·ze ka·zdy graf spójny ma drzewo spinaj ¾ace. Dowód nie podawa÷jednak sposobu znalezienia takiego drzewa. Omówimy teraz algorytm znajduj ¾acy drzewo spin ¾ajace grafu spójnego. Warunki z twierdzenia ?? sugeruj ¾a dwa sposoby rozwi ¾azania tego problemu:

Usuwamy kolejne kraw¾edzie dbaj ¾ac o zachowanie spójno´sci, tak d÷ugo jak to mo·zliwe.

Startujemy od zbioru pustego i dodajemy kolejne kraw¾edzie dbaj ¾ac o zachowanie acykliczno´sci, tak d÷ugo jak to mo·zliwe.

Okazuje si ¾e, ·ze bardziej efektywny jest, na ogó÷, algorytm oparty na drugim pomy´sle. Algo- rytm oparty na pierwszym mo·ze by´c szybszy dla grafu rzadkiego, tzn. takiego, w którym ilo´s´c kraw¾edzi jEGj jest du·zo mniejsza ni·z kwadrat liczby wierzcho÷ków jVGj2. Jednak dla grafów rzadkich algorytm oparty na drugim pomy´sle jest wystarczaj ¾aco szybki i w konsekwencji mo·zna go stosowa´c do dowolnych grafów spójnych.

Za÷ó·zmy, ·ze G = (E; V ) jest grafem spójnym oraz a dowolnie wybranym wierzcho÷kiem.

Drzewo(G; a) V0 :=fag E0 :=;

while V n V0 6= ; do

Wybierz kraw¾ed´z bc tak ¾a, ·ze b 2 V0 i c 2 V n V0 V0 := V0[ fcg

E0 := E0[ fbcg T := (V0; E0)

(5)

Graf G Drzewo spinaj ¾ace T

Drzewo spinaj ¾ace T

Twierdzenie 1. Wynikiem dzia÷ania procedury Drzewo jest drzewo spinaj ¾ace T grafu spójnego G.

Dowód. Udowodnimy kolejno kilka prostych faktów. Je·zeli nie zaznaczymy inaczej, sfor- mu÷owania b ¾ed ¾a dotyczy´c dowolnej iteracji.

(1) Ko´nce kraw¾edzi z E0 nale·z ¾a do V0 (czyli (V0; E0)jest grafem).

Dla E0 =; jest to oczywiste. W÷asno´s´c (1) jest niezmiennikiem p ¾etli, bo koniec kraw¾edzi dodawanej do E0 jest dodawany do V0.

(2) Je·zeli V n V0 6= ;, to wybór kraw¾edzi bc jest mo·zliwy.

Wystarczy wzi ¾a´c dowolny wierzcho÷ek z V n V0 i po÷¾aczy´c go ´scie·zk ¾a z a (spójno´s´c). Na podstawie w÷asno´sci ?? ´scie·zka ta zawiera szukan ¾a kraw¾ed´z.

(3) Procedura zatrzyma si ¾e.

Wynika to ze sko´nczono´sci V .

(4) W÷asno´s´c "(V0; E0)jest drzewem" jest niezmiennikiem p ¾etli.

Spójno´s´c (V0; E0)jest niezmiennikiem p ¾etli, bo dodawany wierzcho÷ek jest po÷¾aczony kraw¾edzi ¾a z wierzcho÷kiem nale·z ¾acym do V0. Poniewa·z w ka·zdej iteracji dodajemy tyle samo wierz- cho÷ków co kraw¾edzi, wi ¾ec niezmiennikiem p ¾etli jest tak·ze warunek

jE0j = jV0j 1.

Teza wynika zatem z twierdzenia ??.

(5) Po wyj´sciu z p ¾etli, (V0; E0)jest drzewem spinaj ¾acym G.

Przed wej´sciem do p ¾etli graf (V0; E0) = (fag ; ;) jest drzewem. Z (4) wnioskujemy wi ¾ec, ze po wyj´sciu (V· 0; E0) jest równie·z drzewem. Poniewa·z mamy wtedy V0 = V, wi ¾ec jest to drzewo spinaj ¾ace.

(6)

Dla grafu niespójnego pocedura Drzewo nie dzia÷a, bo po wyczerpaniu wszystkich wierz- cho÷ków ze sk÷adowej Ga nie jest mo·zliwy wybór kolejnej kraw¾edzi bc. Je´sli jednak w p ¾etli while warunek

V n V0 6= ; zast ¾apimy warunkiem

istnieje kraw¾ed´z bc taka, ·ze b 2 V0 i c 2 V n V0, to dostaniemy algorytm znajduj ¾acy drzewo spinaj ¾ace sk÷adowej Ga.

Cwiczenie 9.´ Napisa´c algorytm znajduj ¾acy drzewo spinaj ¾ace grafu spójnego metod ¾a usuwania z grafu kolejnych kraw ¾edzi i udowodni´c poprawno´s´c dzia÷ania.

Problem znajdowania drzewa spinaj ¾acego grafu jest jednym z wielu, gdzie mamy do czynienia z przeszukiwaniem grafu, czyli przechodzeniem przez wszystkie wierzcho÷ki. Przyjrzyjmy si ¾e algorytmowi Drzewo. Wykonywany w p ¾etli wybór kraw¾edzi nie jest jednoznaczny. Mo·zna wi ¾ec wyobrazi´c sobie ró·zne sposoby wybierania kolejnej kraw¾edzi. Szukanie kraw¾edzi polega na sprawdzeniu, czy ju·z wybrane wierzcho÷ki mo·zna po÷¾aczy´c kraw¾edzi ¾a z jeszcze niewybranymi.

Istotna jest zatem kolejno´s´c w jakiej przegl ¾adamy wierzcho÷ki ju·z wybrane. Zmieniaj ¾ac kole- jno´s´c dostaniemy ró·zne algorytmy przeszukiwania grafu. Dwa najwa·zniejsze to przeszuki- wanie wszerz i przeszukiwanie w g÷¾ab. Procedura przeszukiwania rozpoczyna si ¾e od wyró·znionego wierzcho÷ka, który nazywamy korzeniem drzewa.

Przeszukiwanie wszerz (BFS - breadth …rst search).

Przeszukuj ¾ac wszerz szukamy najpierw s ¾asiadów korzenia. Wierzcho÷ki te tworz ¾a pier- wszy poziom. Nast ¾epnie szukamy s ¾asiadów wierzcho÷ków pierwszego poziomu (w´sród jeszcze niewybranych). Wierzcho÷ki pierwszego poziomu przeg÷¾adamy w kolejno´sci w jakiej by÷y wybierane. Znalezione wierzcho÷ki tworz ¾a drugi poziom. Operacje wyszukiwania powtarzamy na kolejnych poziomach, dopóki nie znajdziemy wszystkich wierzcho÷ków.

Poni·zszy przyk÷ad pokazuje drzewo przeszukiwania wszerz, czyli drzewo spinaj ¾ace TB

uzyskane z wykorzystaniem przeszukiwania wszerz. Korzeniem jest wierzcho÷ek a, za´s s ¾asi- adów wybieramy w kolejno´sci alfabetycznej. Kolejno´s´c wybierania kraw¾edzi jest oznaczona liczbami.

Graf G Drzewo przeszukiwania wszerz TB

(7)

Przeszukiwanie w g÷¾ab (DFS - depth …rst search).

Zaczynamy przeszukiwanie od korzenia i szukamy s ¾asiada ostatnio odwiedzonego wierz- cho÷ka. Je·zeli nie znajdziemy, to cofamy si ¾e do poprzednio odwiedzonego i szukamy s ¾asiada dla niego.

U·zywaj ¾ac przeszukiwania w g÷¾ab, znajdziemy drzewo spinaj ¾ace TD grafu z poprzedniego przyk÷adu. Jest ono nazywane drzewem przeszukiwania w g÷¾ab. Tak jak poprzednio, s ¾asiadów wybieramy w kolejno´sci alfabetycznej i numerujemy kraw¾edzie w kolejno´sci znaj- dowania.

Graf G Drzewo przeszukiwania w g÷¾ab TD

Cwiczenie 10.´ Za÷ó·zmy, ·ze graf G jest reprezentowany w postaci macierzy s ¾asiedztwa.

(1) Zmody…kowa´c (uszczegó÷owi´c) algorytm Drzewo tak by wynikiem by÷o drzewo przeszuki- wania wszerz.

(2) Zmody…kowa´c algorytm tak by wynikiem by÷o drzewo przeszukiwania w g÷¾ab.

(3) Oszacowa´c z÷o·zono´s´c obliczeniow ¾a utworzonych algorytmów.

Przeszukuj ¾ac graf wyró·znili´smy jeden wierzcho÷ek (pocz ¾atek przeszukiwania). W wyniku tego dostali´smy drzewo maj ¾ace pewn ¾a struktur ¾e. Drzewem z wyró·znionym korzeniem (drzewem ukorzenionym) nazywamy par ¾e (T; r), gdzie T jest drzewem, za´s r wyró·znionym wierzcho÷kiem, nazywanym korzeniem drzewa. Dowolny wierzcho÷ek drzewa mo·zna po÷¾aczy´c z korzeniem dok÷adnie jedn ¾a´scie·zk ¾a prost ¾a. D÷ugo´s´c tej ´scie·zki nazywamy numerem poziomu wierzcho÷ka. Zbiór wszystkich wierzcho÷ków o numerze poziomu równym n nazywamy n- tym poziomem drzewa. Najwi ¾ekszy numer poziomu wierzcho÷ka nazywamy wysoko´sci ¾a drzewa. Je·zeli wierzcho÷ek b le·zy na ´scie·zce prostej z korzenia do wierzcho÷ka c 6= b to mówimy, ·ze c jest potomkiem b. Je·zeli b jest przedostatnim wierzcho÷kiem na tej ´scie·zce, to wierzcho÷ek c nazywamy synem (dzieckiem, nast ¾epnikiem) b, za´s wierzcho÷ek b ojcem (rodzicem, poprzednikiem) c. Podgraf Tb z÷o·zony z b, wszystkich jego potomków oraz kraw¾edzi ÷¾acz ¾acych te wierzcho÷ki jest drzewem. Par ¾e (Tb; b) nazywamy poddrzewem o korzeniu b. Li´s´cmi w drzewie ukorzenionym nazywamy wszystkie wierzcho÷ki stopnia 1,

(8)

oprócz korzenia. Drzewo z wyró·znionym korzeniem przedstawiamy gra…cznie rysuj ¾ac korze´n na górze, a dzieci ni·zej ni·z rodziców.

Drzewo przeszukiwania w g÷¾ab z ostatniego przyk÷adu mo·ze by´c traktowane jako drzewo z wyró·znionym korzeniem a. Dla drzewa ukorzenionego (TD; a)mamy:

ojciec g: c;

synowie g: f; h;

potomkowie g: f; e; i; j; h; l; k;

0. poziom drzewa: a;

3. poziom drzewa: d; g;

wysoko´s´c drzewa: 6;

li´scie: d; e; j; k;

poddrzewo (Tg; g): .

W÷asno´s´c 1. Je·zeli (T; r) jest drzewem ukorzenionym, to (1) Korze´n r nie ma ojca.

(2) Dowolny wierzcho÷ek ró·zny od korzenia ma dok÷adnie jednego ojca.

Dowód. Jedyn ¾a ´scie·zk ¾a prost ¾a z r do r jest ´scie·zka trywialna. Nie istnieje wi ¾ec przedostatni wierzcho÷ek na tej ´scie·zce, czyli r nie ma ojca.

Niech b b ¾edzie wierzcho÷kiem ró·znym od korzenia. Istnieje dok÷adnie jedna ´scie·zka prosta z r do b. Poniewa·z b 6= r, wi¾ec jest ona nietrywialna. Ojciec b jest zatem wyznaczony jednoznacznie jako przedostatni wierzcho÷ek na tej ´scie·zce.

W÷asno´s´c 2. Je·zeli wierzcho÷ki a, b drzewa ukorzenionego (T; r) s ¾a po÷¾aczone kraw ¾edzi ¾a, to a jest ojcem b albo b jest ojcem a.

Dowód. Poniewa·z T jest grafem acyklicznym, wi ¾ec a 6= b. Zatem przynajmniej jeden z rozwa·zanych wierzcho÷ków jest ró·zny od r. Mo·zemy przyj ¾a´c, ·ze b 6= r. Ze spójno´sci T wynika, ·ze istnieje ´scie·zka prosta d = r : : : b. Rozwa·zmy przypadki.

(1) a nie nale·zy do d.

Wtedy a nie jest ojcem b. Ponadto r : : : ba jest ´scie·zk ¾a prost ¾a, czyli b jest ojcem a.

(2) a jest przedostatnim wierzcho÷kiem w d, czyli d = r : : : ab.

Wówczas a jest ojcem b. Poniewa·z pod´scie·zka r : : : a nie zawiera b, wi ¾ec b nie jest ojcem a.

(3) a nale·zy do d, ale nie jest przedostatnim wierzcho÷kiem w d, czyli d = r : : : a : : : b.

Dodaj ¾ac do ´scie·zki prostej a : : : b (d÷ugo´sci > 1) kraw¾ed´z ba dostajemy cykl a : : : ba,

(9)

wbrew acykliczno´sci T . Wynika st ¾ad, ·ze ten przypadek nie mo·ze zachodzi´c.

Z (1)-(3) wnioskujemy tez ¾e.

Cwiczenie 11.´ Pokaza´c, ·ze w nietrywialnym drzewie ukorzenionym li´scie s ¾a jedynymi wierz- cho÷kami, które nie maj ¾a synów.

Cwiczenie 12.´ (1) W drzewie (TB; a) z przedostatniego przyk÷adu powtórzy´c obliczenia, które zrobili´smy dla drzewa (TD; a).

(2) Traktuj ¾ac TB i TD jako drzewa wolne, utworzy´c (narysowa´c) drzewa ukorzenione (TB; f ) i (TD; f ). Powtórzy´c obliczenia wykonane dla (TD; a) i (TB; a).

(3) Dla grafu G utworzy´c drzewo przeszukiwania wszerz (T1; f ) i drzewo przeszukiwania w g÷¾ab (T2; f ). Powtórzy´c obliczenia wykonane dla (TD; a) i (TB; a).

Cwiczenie 13.´ W poni·zszym gra…e

(1) Znale´z´c drzewo spinaj ¾ace TB przeszukuj ¾ac graf wszerz oraz drzewo spinaj ¾ace TD przeszuku- j ¾ac graf w g÷¾ab. Przeszukiwanie rozpocz ¾a´c od wierzcho÷ka a, wierzcho÷ki wybiera´c w kolejno´sci alfabetycznej.

(2) Narysowa´c drzewa ukorzenione (TB; a) i (TD; a). Wyznaczy´c: li´scie, trzeci poziom, wysoko´s´c drzewa, synów wierzcho÷ka e, potomków wierzcho÷ka d (narysowa´c poddrzewo o korzeniu d).

(3) Powtórzy´c (1) i (2) zast ¾epuj ¾ac wierzcho÷ek a wierzcho÷kiem h.

Zauwa·zmy, ·ze przeszukuj ¾ac graf omówionymi metodami (wszerz, w g÷¾ab), mamy dowol- no´s´c w wybieraniu s ¾asiada danego wierzcho÷ka (w przyk÷adach i ´cwiczeniach robili´smy to alfabetycznie). Dokonuj ¾ac wyboru wprowadzamy, de facto, pewien porz ¾adek w zbiorze dzieci

(10)

poszczególnych wierzcho÷ków, który gra…cznie oddajemy rysuj ¾ac dziecko wybrane wcze´sniej na lewo od wybranego pó´zniej. Oznacza to, ·ze otrzymane w ten sposób drzewo ukorzenione ma dodatkow ¾a struktur ¾e. Zanim j ¾a formalnie opiszemy zauwa·zmy, ·ze dla zbioru sko´nczonego, ustawienie jego elementów w ci ¾ag sko´nczony (ponumerowanie) jest równoznaczne ze zde…n- iowanie w nim relacji liniowego porz ¾adku.

Drzewo z wyró·znionym korzeniem nazywamy uporz ¾adkowanym, je·zeli dla dowol- nego wierzcho÷ka, zbiór jego dzieci jest liniowo uporz ¾adkowany (o ile jest niepusty). Jak wcze´sniej wspomnieli´smy, drzewa spinaj ¾ace otrzymane w wyniku dzia÷ania algorytmu Drzewo mo·zna traktowa´c jako uporz ¾adkowane drzewa z wyró·znionym korzeniem. Porz ¾adek w zbiorze dzieci danego wierzcho÷ka jest okre´slony przez kolejno´s´c wyboru. Przyk÷adowo w rozpa- trywanych wy·zej drzewach przeszukiwania wszerz i przeszukiwania w g÷¾ab by÷to porz ¾adek alfabetyczny.

Zagadnienie przeszukiwania grafu jest zwi ¾azne z problemem porz ¾adkowania wierzcho÷ków grafu, tj. ustawiania ich w ci ¾ag. Graf spójny i jego drzewo spinaj ¾ace maj ¾a te same wierz- cho÷ki. Porz ¾adkowanie wierzcho÷ków grafu spójnego sprowadza si ¾e wi ¾ec do porz ¾adkowania wierzcho÷ków jego drzewa spinaj ¾acego. Dwa podstawowe sposoby porz ¾adkowania wierz- cho÷ków: pre…ksowy (preorder) i post…ksowy (postorder) wykorzystuj ¾a drzewo przeszuki- wania w g÷¾ab. Opis procedury porz ¾adkujacej wierzcho÷ki drzewa mo·zna jednak sformu÷owa´c dla dowolnego uporz ¾adkowanego drzewa z wyró·znionym korzeniem.

Za÷ó·zmy, ·ze mamy uporz ¾adkowane drzewo z wyró·znionym korzeniem (T; r). Ustawimy wierzcho÷ki tego drzewa w ci ¾ag. W tym celu tworzymy zamkni ¾et ¾a ´scie·zk¾e o pocz ¾atku r wed÷ug nast ¾epuj ¾acych regu÷:

Je·zeli bie·z ¾acy wierzcho÷ek ma nieodwiedzone jeszcze dzieci, to idziemy (dodajemy kraw¾ed´z) do pierwszego nieodwiedzonego dziecka (zgodnie z porz ¾adkiem w zbiorze dzieci).

Je·zeli bie·z ¾acy wierzcho÷ek nie ma nieodwiedzonych dzieci, to cofamy si ¾e (dodajemy kraw¾ed´z) do ostatnio odwiedzonego wierzcho÷ka.

Procedur ¾e ko´nczymy, je´sli po osi ¾agni ¾eciu korzenia oka·ze si ¾e, ·ze wszystkie jego dzieci by÷y ju·z odwiedzone.

Mo·zna sprawdzi´c, ·ze w wyniku opisanej wy·zej procedury powstaje ´scie·zka zamkni ¾eta za- wieraj ¾aca wszystkie wierzcho÷ki drzewa T . Niektóre wierzcho÷ki wyst ¾epuj ¾a tam wielokrotnie.

Naturalne s ¾a dwa sposoby uporz ¾adkowania wierzcho÷ków (ustawienia w ci ¾ag).

Porz ¾adek pre…ksowy (preorder)

Wierzcho÷ek wstawiamy do ci ¾agu przy pierwszym pojawieniu si ¾e na ´scie·zce.

Porz ¾adek post…ksowy (postorder)

Wierzcho÷ek wstawiamy do ci ¾agu przy ostatnim pojawieniu si ¾e na ´scie·zce.

(11)

Dla rozpatrywanego wcze´sniej drzewa przeszukiwania w g÷¾ab mamy

Porz ¾adek preorder: a; b; c; d; g; f; e; i; j; h; l; k:

Porz ¾adek postorder: d; e; j; i; f; k; l; h; g; c; b; a:

W uporz ¾adkowaniu pre…ksowym rodzice s ¾a umieszczeni w ci ¾agu przed dzie´cmi, a w post-

…ksowym - po dzieciach.

Cwiczenie 14.´ Traktuj ¾ac drzewa ukorzenione z ´cwicze´n 12 i 13 jako drzewa uporz ¾adkowane (kolejno´s´c dzieci alfabetyczna), uporz ¾adkowa´c ich wierzcho÷ki w porz ¾adku pre…ksowym i post-

…ksowym.

Aby uzyska´c algorytm porz ¾adkowania wierzcho÷ków grafu spójnego musimy po÷¾aczy´c algo- rytm tworzenia drzewa przeszukiwania w g÷¾ab (algorytm Drzewo w wersji z ´cwiczenia 10) z metod ¾a opisan ¾a powy·zej.

Cwiczenie 15.´ Napisa´c algorytmy porz ¾adkowania wierzcho÷ków grafu spójnego w porz ¾adku preorder i w porz ¾adku postorder (u·zy´c pseudokodu lub jakiegokolwiek j ¾ezyka programowania).

Drzewo ukorzenione, w którym ka·zdy wierzcho÷ek ma co najwy·zej dwóch synów nazywamy drzewem binarnym. Je·zeli dla pewnej liczby naturalnej m, ka·zdy wierzcho÷ek ma co na- jwy·zej m synów, to drzewo nazywamy m-arnym. Drzewa binarne odgrywaj ¾a szczególnie du·z ¾a rol ¾e w zastosowaniach. Uporz ¾adkowane drzewa binarne s ¾a de…niowane w specy-

…czny sposób. Dla ustalonego wierzcho÷ka a, zbiór jego dzieci ma 1 lub 2 elementy (o ile jest niepusty). Zamiast wprowadza´c liniowy porz ¾adek w tym zbiorze, jego elementom przypisu- jemy warto´sci 0 lub 1 (w sposób ró·znowarto´sciowy). Dziecko, któremu przypisano warto´s´c 0 nazywamy dzieckiem lewym, za´s warto´s´c 1 - dzieckiem prawym. Oznacza to, ·ze poni·zsze rysunki reprezentuj ¾a ró·zne uporz ¾adkowania drzewa binarnego o korzeniu r.

(12)

Dla drzew binarnych mo·zna wprowadzi´c jeszcze jedn ¾a metod ¾e porz ¾adkowania wierzcho÷ków.

Porz ¾adek in…ksowy (inorder).

Wierzcho÷ek wstawiamy do ci ¾agu mi ¾edzy lewym a prawym dzieckiem.

Dla grafów z ostatniego rysunku mamy:

lewy graf: c; a; d; r; e; b;

prawy graf: c; a; d; r; b; e.

Wró´cmy do de…nicji drzewa z wyró·znionym korzeniem. Zauwa·zmy, ·ze traktuj ¾ac ojca jako pocz ¾atek, a syna jako koniec kraw¾edzi, przekszta÷camy drzewo ukorzenione (T; r) w graf skierowany eT. Dok÷adniej de…niujemy eT przyjmuj ¾ac VTe = VT oraz

ETe =f(a; b) ; a; b 2 VT ^ a jest ojcem bg .

Otrzymany w ten sposób graf skierowany nazywamy drzewem skierowanym z wyró·znionym korzeniem.

(T; r) Te

Wierzcho÷ek a grafu skierowanego nazywamy ´zród÷emtego grafu je´sli indeg (a) = 0, nato- miast uj´sciem je´sli outdeg (a) = 0. Z w÷asno´sci 1 wynika natychmiast, ·ze w drzewie uko- rzenionionym skierowanym eT, korze´n jest jedynym ´zród÷em.

W dalszej cz ¾e´sci wyk÷adu przyda si ¾e kryterium pozwalaj ¾ace rozstrzygn ¾a´c czy graf skierowany jest drzewem ukorzenionym.

Twierdzenie 2. Graf skierowany G jest drzewem skierowanym z korzeniem r wtedy i tylko wtedy, gdy jego szkielet GN jest spójny oraz

(1) indeg (r) = 0 i indeg (a) = 1 dla a6= r.

Dowód. " ) " Za÷ó·zmy, ·ze graf skierowany G jest drzewem skierowanym generowanym przez drzewo ukorzenione (T; r). Z de…nicji drzewa skierowanego oraz szkieletu wynika, ·ze VT = VG = VGN. Z w÷asno´sci 2 wnioskujemy, ·ze je´sli (a; b) 2 EG, to (b; a) =2 EG i w konsekwencji szkielet GN nie ma kraw¾edzi wielokrotnych. Korzystaj ¾ac ponownie z w÷asno´sci 2, dla dowolnych wierzcho÷ków a, b mamy

fa; bg 2 EGN , (a; b) 2 EG_ (b; a) 2 EG

, b jest ojcem a w T _ a jest ojcem b w T , fa; bg 2 ET.

(13)

Oznacza to, ·ze GN = T, czyli graf GN jest spójny. Warunek (1) wynika z w÷asno´sci 1, bo

indeg (a) =jfx; (x; a) 2 EGgj = jfx; x jest ojcem a w T gj =

( 0 ; a = r 1 ; a6= r :

"( " Za÷ó·zmy, ·ze G jest grafem skierowanym o spójnym szkielecie spe÷niaj ¾acym (1). Z Lematu o u´sciskach d÷oni dla grafów skierowanych mamy

jEGNj = jEGj = X

a2VG

indeg a =X

a6=r

1 = jVGj 1 = jVGNj 1.

Wobec spójno´sci GN, z twierdzenia ?? wynika, ·ze GN jest drzewem. Aby zako´nczy´c dowód wystarczy pokaza´c, ·ze drzewo ukorzenione (GN; r)generuje graf skierowany G, tzn.

(2) (a; b)2 EG , a jest ojcem b w (GN; r). Udowodnimy najpierw, ·ze

(3) je·zeli a jest ojcem b w (GN; r), to (a; b) 2 EG.

Przypu´s´cmy nie wprost, ·ze tak nie jest, tzn. istniej ¾a wierzcho÷ki a, b takie, ·ze a jest ojcem b oraz (a; b) =2 EG.

W´sród wszystkich par wierzcho÷ków o tej w÷asno´sci wybierzmy a0, b0, dla których a0 le·zy na poziomie o najmniejszym mo·zliwym numerze k. Z za÷o·zenia dostajemy (a0; b0) =2 EG, fa0; b0g 2 EGN i w konsekwencji (b0; a0)2 EG.

Rozpatrzmy przypadki k = 0, tzn. a0 = r.

Wtedy (b0; r)2 EG, co jest sprzeczne z za÷o·zeniem indeg (r) = 0.

k > 0.

Wtedy a0 ma na poziomie k 1ojca c. Z minimalno´sci k wynika, ·ze (c; a0)2 EG.

(14)

Poniewa·z a0 jest ojcem b0, wi ¾ec b0 le·zy na poziomie k +1, czyli c 6= b0. St ¾ad indeg a0

2 > 1, co jest sprzeczne z za÷o·zeniem. Otrzymane sprzeczno´sci dowodz ¾a implikacji (3).

Udowodnimy teraz implikacj ¾e przeciwn ¾a:

(4) je·zeli (a; b) 2 EG, to a jest ojcem b w (GN; r).

Za÷ó·zmy, ·ze (a; b) 2 EG i przypu´s´cmy nie wprost, ·ze a nie jest ojcem b. Poniewa·z fa; bg 2 EGN, wi ¾ec na podstawie w÷asno´sci 2, b jest ojcem a. Zatem z (3) wynika, ze (b; a) 2 E· G i w konsekwencji wierzcho÷ki a i b s ¾a w gra…e nieskierowanym GN

po÷¾aczone dwiema kraw¾edziami. Jest to sprzeczne z acykliczno´sci ¾a GN. Otrzymana sprzeczno´s´c dowodzi (4). Z (3) i (4) wynika (2), co ko´nczy dowód twierdzenia.

Niech (T; r) b ¾edzie drzewem z wyró·znionym korzeniem. Z w÷asno´sci 1 wynika, ·ze r nie ma poprzednika (ojca), natomiast wszystkie wierzcho÷ki a 6= r maj ¾a dok÷adnie jednego poprzed- nika (ojca). Mo·zemy wi ¾ec na VT zde…niowa´c funkcj ¾e przyjmuj ¾ac:

p (a) =

( poprzednik a gdy a 6= r;

; gdy a = r:

Funkcj ¾e p nazywamy wektorem poprzedników drzewa ukorzenionego (T; r) i cz ¾esto za- pisujemy w postaci [p (a)]a2V

T. Je´sli wierzcho÷ki drzewa T ustawimy w ci ¾ag VT =fx1; x2; : : : ; xng, to funkcja p jest wyznaczona przez wektor

[p (x1) ; p (x2) ; : : : ; p (xn)]

i mo·zemy j ¾a z tym wektorem uto·zsamia´c.

Je·zeli (T; r) jest drzewem ukorzenionym, to w T mo·zemy wprowadzi´c strukur ¾e grafu skierowanego. De…nicj ¾e wektora poprzedników stosuje si ¾e równie·z w tym przypadku, tzn.

dla skierowanych drzew z wyró·znionym korzeniem. Sytuacja taka jest nawet ÷atwiejsza do opisania bo mamy wtedy

p (b) = a, (a; b) 2 ET:

Zauwa·zmy jeszcze, ·ze przy ustalonym zbiorze wierzcho÷ków V , wektor poprzedników p drzewa (skierowanego) T z korzeniem r jednoznacznie okre´sla to drzewo. Korze´n r jest bowiem jedynym elementem zbioru fa 2 V ; p (a) = ;g oraz

ET =f(a; b) ; (a; b) 2 ETg = f(a; b) ; p (b) = a 2 V g = f(p (b) ; b) ; p (b) 6= ;g ;

czyli zbiór kraw¾edzi ET mo·zna wyznaczy´c znaj ¾ac funkcj ¾e p. Oczywi´scie, podobna zale·zno´s´c zachodzi te·z dla drzew ukorzenionych nieskierowanych. Wektor poprzedników stanowi za- tem reprezentacj ¾e analityczn ¾a drzewa ukorzenionego. Reprezentacja ta jest wygodniejsza ni·z rozwa·zane wcze´sniej macierze s ¾asiedztwa i incydencji, listy s ¾asiedztw, czy kody Prüfera. Co wi ¾ecej, równie·z drzewo wolne mo·zna zapisa´c za pomoc ¾a wektora poprzedników. W tym celu wystarczy wyró·zni´c jakikolwiek wierzcho÷ek jako korze´n.

(15)

Cwiczenie 16.´ Znale´z´c wektor poprzedników dla nast ¾epuj ¾acych drzew ukorzenionych (kole- jno´s´c wierzcho÷ków alfabetyczna)

1) 2) 3)

4) 5)

Cwiczenie 17.´ Wyznaczczy´c drzewo ukorzenione (T; r) o zbiorze wierzcho÷ków V = f1; : : : ; ng oraz wektorze poprzedników p.

(1) p = [4; 4; 6; 6; ;; 5].

(2) p = [;; 1; 1; 1; 2; 2; 4; 4; 7; 9].

(3) p = [;; 1; 2; 3; 3; 3; 1; 7; 7; 9; 9; 1].

(4) p = [7; 9; 7; 11; 10; 10; ;; 1; 1; 7; 10; 9].

(5) p = [2; 3; 13; 6; 6; 12; 10; 10; 10; 11; 12; 13; 14; ;].

Cwiczenie 18.´ Znale´z´c wektory poprzedników drzew z ´cwiczenia ?? przyjmuj ¾ac r = 2 oraz r = 5 (kolejno´s´c wierzcho÷ków rosn ¾aca).

Niech a b ¾edzie ustalonym wierzcho÷kiem drzewa ukorzenionego (T; r) (nieskierowanego). W T istnieje dok÷adnie jedna ´scie·zka prosta z a do r. Znaj ¾ac wektor poprzedników p, mo·zemy

÷atwo t ¾e ´scie·zk¾e wyznaczy´c. Ma on posta´c:

a p (a) p (p (a)) : : : Mo·zna to zapisa´c przy pomocy nast ¾epuj ¾acego algorytmu.

Path(p; a)

x := a % bie·z ¾acy wierzcho÷ek

d := a % zbudowana ´scie·zka

while p (x) 6= ; do d := dfx; p (x)g p (x) x := p (x)

(16)

Wynikiem dzia÷ania procedury Path jest ´scie·zka prosta d z wierzcho÷ka a do korzenia r.

Procedur ¾e mo·zna te·z wykorzysta´c do szukania ´scie·zki prostej z korzenia do wierzcho÷ka a (równie·z dla drzew skierowanych). Nale·zy jedynie zapisa´c wierzcho÷ki ´scie·zki d w odwrotnej kolejno´sci.

Cwiczenie 19.´ Znale´z´c ´scie·zk ¾e prost ¾a z wierzcho÷ka a do korzenia dla drzew, których wektor poprzedników jest równy p. Zak÷adamy, ·ze V = f1; : : : ; ng.

(1) p = [;; 1; 1; 1; 2; 2; 4; 4; 7; 9], a = 5.

(2) p = [;; 1; 1; 1; 2; 2; 4; 4; 7; 9], a = 10.

(3) p = [;; 1; 2; 3; 3; 3; 1; 7; 7; 9; 9; 1], a = 5.

(4) p = [;; 1; 2; 3; 3; 3; 1; 7; 7; 9; 9; 1], a = 10.

(5) p = [2; 3; 13; 6; 6; 12; 10; 10; 10; 11; 12; 13; 14; ;], a = 5.

(6) p = [2; 3; 13; 6; 6; 12; 10; 10; 10; 11; 12; 13; 14; ;], a = 10.

Poj ¾ecie wektora poprzedników mo·zna rozszerzy´c na dowolne proste grafy skierowane. Za-

÷ó·zmy, ·ze G = (V; E) jest prostym grafem skierowanym oraz r ustalonym wierzcho÷kiem.

Funkcj ¾e p = [p (a)]a2V tak ¾a, ·ze p (r) = ; oraz dla a 2 V n frg zachodzi (p (a) ; a)2 E lub p (a) = ;

nazywamy wektorem poprzedników w G. Oznaczmy

Vp =fa; p (a) 6= ;g [ frg oraz Ep =f(p (a) ; a) ; p (a) 6= ;g :

Para (Vp; Ep)mo·ze, ale nie musi by´c podgrafem grafu G. Je´sli Gp = (Vp; Ep) jest podgrafem, to nazywamy go podgrafem poprzedników.

Rozwa·zmy graf skierowany G

Dla r = 1 funkcje p1 = [;; 1; 2; 1; 4], p2 = [;; 1; 4; 2; ;], p3 = [;; 4; 2; 2; ;] s ¾a wektorami poprzedników. Odpowiadaj ¾a im grafy poprzedników, z których dwa pierwsze s ¾a drzewami skierowanymi o korzeniu 1, za´s trzeci jest grafem skierowanym, ale nie jest drzewem skierowanym.

(17)

Podobnie dla r = 2 funkcja p = [;; ;; 2; 2; ;] jest wektorem poprzedników, dla którego graf poprzedników jest drzewem skierowanym o korzeniu 2.

Przyjmuj ¾ac natomiast r = 1 oraz p = [;; ;; 2; 2; ;] dostajemy wektor poprzedników taki, ·ze Vp =f1; 3; 4g, Ep =f(2; 3) ; (2; 4)g. Para (Vp; Ep) nie jest wi ¾ec grafem, bo 2 =2 Vp.

Cytaty

Powiązane dokumenty

• Podział drzewa kończy się gdy liczba obiektów do podziału jest już mniejsza niż pewna wartości progowa.. • Przycinanie drzew jest możliwe już po

Klasyfikacja odbywa się poprzez przeglądanie drzewa od korzenia do liści przez krawędzie opisane wartościami atrybutów... Przykład: automatyczny podział kierowców na

Drzewo wyrażeń arytmetycznych jest to drzewo binarne, w którym każdy wierzchołek ma albo dwóch synów albo wcale. W takim drzewie liście etykietowane są stałymi

• wykonać klasyfikację dla wybranych danych wielowymiarowych ze strony uci za pomocą metody drzewa klasyfikacyjnego, porównać jakość klasyfikacji na danych testowych z

Najmniejszą entropię mają atrybuty b i d, lecz b ma mniej wartości, dlatego on będzie korzeniem drzewa.. Uruchomienie metody ID3 dla lewego poddrzewa prowadzi do wstawienia

Dzień Pogoda Temperatura Wilgotność Wiatr Tenis D9 Słonecznie Zimno Normalna Słaby Tak D11 Słonecznie Przyjemnie Normalna Silny Tak D1 Słonecznie Gorąco Wysoka Słaby Nie

Wypisz wszystkie elementy tego drzewa BST obchodząc je w porządku INORDER, PREORDER, POSTORDER.. Zadanie 6 Zapisz funkcję szukającą poprzednika w

Jeżeli liczba lewych potomków jest mniejsza niż liczba lewych potomków prawego potomka, to podnosimy najpierw lewego potomka prawego potomka, a potem podnosimy