Skocz do zawartości

Public disclosure

  • wpisy
    20
  • komentarzy
    161
  • wyświetleń
    24221

[brzozy pień jak struna światła]Czyli krótka rozprawa o lasach i drzewach


Hakken

829 wyświetleń

Abstrakt

Aby wprowadzić pewną hierarchię i porządek przy rozważaniu grafów wprowadzono termin drzewa. Różne rodzaje drzew są różnymi wariacjami na temat grafów, umożliwiając łatwe (szybkie) uzyskiwanie informacji właśnie ze względu na większe uporządkowanie.

Uwaga, przed lekturą zachęcam do zapoznania się z tekstem dotyczącym grafów (link) jak i innych tekstów na tym blogu.

Drzewa wolne

Drzewem wolnym nazwiemy spójny, acykliczny graf. Zbiór rozłącznych drzew nazwiemy lasem.

Przykład:

Drzewo

30a96pl.png

Las

2ue3bs4.png

Drzewa ukorzenione

Drzewo ukorzenione to takie drzewo wolne, w którym wyróżniamy jeden element (korzeń).

Wierzchołki takiego drzewa często nazywa się węzłami.

Drzewa rysuje się zwyczajowo korzeniem u góry, przykładowo:

2dvswuo.png

Tutaj korzeń oznaczyłem podwójnym okręgiem, ale raczej nie będę tego robił, i będę zakładał, że węzeł na górze rysunku do którego nic nie wchodzi jest korzeniem.

Oznaczenia

Rozważmy węzeł x drzewa ukorzenionego T (którego korzeniem niech będzie r). Każdy węzeł na ścieżce z r do x nazwiemy przodkiem x. X jest natomiast potomkiem każdego z tych węzłów.

Na obrazku sprawa wygląda dość jasno - jeżeli na jakiejś ścieżce węzeł a jest wyżej niż węzeł b, to a jest potomkiem b, natomiast b jest przodkiem a.

Poddrzewo o korzeniu x to drzewo złożone z potomków x (i x jest wtedy korzeniem takiego drzewa). Na rysunku jest to tak, jakby "odciąć" jakiś węzeł od reszty drzewa.

Poprzednik x to taki węzeł y, że z y do x jest bezpośrednie połączenie. Wtedy też x jest nazywany następnikiem lub synem lub (w ramach równości płci...) dzieckiem y.

Jeżeli jakiś węzeł nie ma synów (będę raczej stosował to określenie, chociaż w dzisiejszym świecie jest to dość niebezpieczne, ale cóż... żyję na krawędzi icon_cool.gif) to nazywany jest liściem.

Stopień węzła to liczba jego synów.

Głębokość węzła to długość ścieżki od korzenia do tego węzła.

Drzewo uporządkowane to takie, w którym wszyscy synowie są uporządkowani (czyli w jakiś sposób odróżnialni, mogą być pokolorowani czy też ponumerowani).

Drzewa binarne

Drzewo binarne to takie drzewo, że każdy wierzchołek ma co najwyżej dwóch synów (lewego i prawego). Warto przy tym zauważyć, że dwa drzewa: jedne z korzeniem i prawym synem a drugie z korzeniem i lewym synem są różne nawet jeśli wartości w węzłach są takie same.

Przykład:

skxctw.png

Drzewa wyszukiwań binarnych - BST

Drzewo BST to takie drzewo binarne, że jeżeli wartość węzła x wynosi y, to w jego lewym poddrzewie wszystkie węzły będą miały wartość mniejszą niż y, a w prawym większą niż y.

69i4hh.png

Co nam to daje? W normalnym drzewie podczas szukania konkretnej wartości musimy sprawdzić każdy węzeł. W drzewie BST wystarczy tyle operacji, ile wynosi głębokość tego drzewa (porównujemy z wartością w korzeniu, schodzimy w jedną stronę, znowu porównujemy, schodzimy, itd.).

Obiegi drzew

Możemy obchodzić drzewa na trzy sposoby (no, możemy oczywiście na znacznie więcej, ale te trzy są standardowe): prefixowo, infixowo, postfixowo.

Obiegi rozpatrujemy w ramach jakiejś operacji, weźmy na przykład wypisanie wartości danego węzła.

Przy obiegu prefixowym najpierw wypiszemy siebie, później (prefixowo) lewe poddrzewo, a następnie (również prefixowo) prawe poddrzewo.

Przy obiegu infixowym najpierw infixowo wypiszemy lewe poddrzewo, następnie siebie i na końcu (infixowo) prawe poddrzewo.

Jak łatwo zgadnąć przy obiegu postfixowym najpierw postfixowo wypiszemy lewe poddrzewo, później prawo poddrzewo i na końcu siebie.

Ciekawa obserwacja jest taka, że przy wypisaniu infixowo drzewa BST (z angielskiego BST to binary search tree, więc zasadniczo zwrot "drzewo BST" jest pleonazmem, bo BST samo w sobie zawiera słowo "drzewo", ale zwyczajowo tak się mówi) otrzymamy ciąg posortowany (ściśle monotoniczny).

Proponuję jako ćwiczenie przeprowadzić na kartce (albo w myślach) obieg post/pre/in- fixowy dla powyższego drzewa BST.

Jak zawsze zachęcam do komentowania, dyskutowania i zadawania pytań!

3 komentarze


Rekomendowane komentarze

Link do tekstu o grafach gdziesik wcięło (poprawiłem już, dzięki ;)), po za tym - dobry kawałek wpisu. Przy drzewach BST bym jeszcze wspomniał o drzewie AVL, ewentualnie o algorytmach równoważących.

Also, obligatory do wpisu:

Link do komentarza

O równoważeniu i AVL mogę w sumie zrobić wpisik (zasługują na własny), ale najpierw chciałem jeszcze się zająć kilkoma algorytmami (podstawy w stylu bfs/dfs, przy okazji pojawi się zagadnienie kolorowania drzewa). Drzewa czerwono czarne też pewnie się pojawią przy AVL.

Link do komentarza
Gość
Dodaj komentarz...

×   Wklejony jako tekst z formatowaniem.   Wklej jako zwykły tekst

  Maksymalna ilość emotikon wynosi 75.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...