Ogólne wiadomości o drzewach - Uniwersytet Ekonomiczny w

Transkrypt

Ogólne wiadomości o drzewach - Uniwersytet Ekonomiczny w
2010-11-24
Ogólne wiadomości o drzewach
Algorytmy i struktury danych
Wykład 4.
Rok akademicki: 2010/2011
Drzewo jako struktura danych
Drzewo - kolekcja elementów pozostających w zależności hierarchicznej,
posiadająca jeden element wyróżniony zwany korzeniem drzewa.
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
2
1
2010-11-24
Pojęcia związane z drzewem 1/2
•
•
•
•
•
•
•
•
węzeł - element drzewa,
krawędź - połączenie występujące w drzewie,
korzeo drzewa - początkowy element drzewa,
rodzic, przodek - element nadrzędny
dziecko, potomek - element podrzędny
liśd - węzeł nie posiadający potomków
węzeł wewnętrzny - węzeł posiadający potomków
poddrzewo - rozpatrywany element wraz ze wszystkimi jego
potomkami (bezpośrednimi i pośrednimi)
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
3
Pojęcia związane z drzewem 2/2
• wysokośd drzewa - długośd najdłuższej ścieżki od korzenia do
liścia
• poziom węzła (głębokośd węzła) - długośd ścieżki od korzenia
do danego węzła.
• stopieo węzła - liczba posiadanych przez węzeł potomków
• elementy siostrzane - węzły posiadające tego samego rodzica
co rozpatrywany węzeł
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
4
2
2010-11-24
Rodzaje drzew
• drzewo uporządkowane - drzewo, w którym potomkowie
węzłów występują w ściśle określonej kolejności (np.
alfabetycznej)
• drzewo etykietowane - drzewo, w którym węzły lub krawędzie
mają przypisane nazwy i/lub wartości
• drzewo binarne - drzewo, w którym węzły mają co najwyżej
dwóch potomków (potomek lewy oraz potomek prawy)
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
5
Implementacje drzew
•
•
•
•
wektorowa,
listowa,
LCRS (Leftmost-Child, Right-Sibling),
implementacja drzew binarnych.
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
6
3
2010-11-24
Implementacja wektorowa 1/3
• implementacja wektorowa = implementacja rodzicielska,
• elementy drzewa należy ponumerowad kolejnymi liczbami
całkowitymi,
• utworzyd wektor o liczbie elementów zgodnej z liczbą węzłów,
• i-ty element wektory przechowuje numer rodzica i-tego węzła
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
7
Implementacja wektorowa 2/3
0
1
4
2
5
6
3
7
8
9
-1
0
0
0
1
1
2
2
3
3
0
1
2
3
4
5
6
7
8
9
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
8
4
2010-11-24
Implementacja wektorowa 3/3
• Cechy implementacji wektorowej:
– prosta,
– umożliwia prostą wędrówkę w kierunku korzenia drzewa,
– wędrówka od korzenia w kierunku liści wymaga sekwencyjnego
przeglądnięcia wektora.
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
9
0
Implementacja listowa 1/2
1
4
2
5
6
7
0
1
2
1
4
5
2
6
7
3
8
9
4
-
5
-
6
-
7
-
8
-
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet
w Krakowie
9 Ekonomiczny
-
3
8
9
3
10
5
2010-11-24
Implementacja listowa 2/2
• pozwala na łatwą wędrówkę od korzenia w kierunku liści,
• trudna jest wędrówka w kierunku korzenia - wymaga
sekwencyjnego przeglądania list potomków.
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
11
Implementacja LCRS (Leftmost-Child, Right-Sibling)
• węzły identyfikowane są przez etykiety, a nie indeksy
• pozwala na stosunkowo proste poruszanie się po drzewie w
obu kierunkach,
• pozwala na realizację zaawansowanych operacji na drzewie
(np. łączenie drzew).
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
12
6
2010-11-24
W
LCRS
A
M
Drzewo
B
N
K
7
C
L
LC
RS
0
A
5
1
1
B
3
2
2
C
8
-7
3
K
-
4
4
L
-
-1
5
M
-
6
6
N
-
0
7
W
0
-
8
X
-
9
X
Y
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet
Ekonomiczny
9
Y
-2w Krakowie
13
Implementacja drzew binarnych
W
A
M
Drzewo
B
N
K
6
L
LC
RC
0
A
4
5
1
B
2
3
2
K
-
-
3
L
-
-
4
M
-
-
5
N
-
-
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny 6w Krakowie
W
0
1
każdy węzeł przechowuje
referencje do lewego (LC - left child)
oraz prawego (RC - right child) potomka
14
7
2010-11-24
Poruszanie się po drzewie
• sposób poruszania się po drzewie – kolejnośd odwiedzania
węzłów
• trzy podstawowe metody poruszania się po drzewie:
– preorder,
– postorder,
– inorder.
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
15
Metoda preorder
1
2
3
5
8
4
6
9
10
7
Metoda preorder - rozpoczyna się
od korzenia drzewa, a następnie
odwiedzane są wszystkie jego
poddrzewa w kolejności
od lewej do prawej strony
Przechodzenie preorder: 1 2 3 5 8 9 6 10 4 7
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
16
8
2010-11-24
Metoda postorder
1
2
3
4
5
8
6
9
7
Metoda postorder - w pierwszej
kolejności odwiedzane są wszystkie
poddrzewa w kolejności od lewej
do prawej strony, a następnie
odwiedzany jest korzeo drzewa.
10
Przechodzenie postorder: 2 8 9 5 10 6 3 7 4 1
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
17
Metoda inorder
1
2
3
5
8
4
6
9
10
7
Metoda inorder - odwiedzane jest lewe
skrajne poddrzewo, następnie korzeo
drzewa, po czym następuje przejście
przez pozostałe poddrzewa w kolejności
od lewej do prawej strony.
Przechodzenie inorder: 2 1 8 5 9 3 10 6 7 4
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
18
9
2010-11-24
„Ręczna” implementacja metod poruszania się po drzewie 1/2
1
2
3
5
8
4
6
9
7
10
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
19
„Ręczna” implementacja metod poruszania się po drzewie 2/2
•
•
wychodząc od korzenia drzewa należy odwiedzid wszystkie jego elementy w
kierunku przeciwnym do ruchu wskazówek zegara,
sposób dalszego postępowania jest uzależniony od metody poruszania się po
drzewie:
– metoda preorder - należy wypisad etykietę każdego węzła przy jego pierwszym
odwiedzeniu, czyli uzyskamy: 1, 2, 3, 5, 8, 9, 6, 10, 4, 7
– metoda postorder - należy wypisad etykietę każdego węzła przy jego ostatnim
odwiedzeniu, co daje: 2, 8, 9, 5, 10, 6, 3, 7, 4, 1
– metoda inorder:
• jeżeli węzeł jest liściem, to jego etykieta jest wypisywana przy pierwszym
odwiedzeniu,
• jeżeli węzeł jest węzłem wewnętrznym, to jego etykieta jest wypisywana przy
drugim odwiedzeniu.
co daje w rozpatrywanym przykładzie: 2, 1, 8, 5, 9, 3, 10, 6, 7, 4
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
20
10
2010-11-24
Drzewa wyrażeo arytmetycznych
*
3
+
2
5
3 * (2 + 5)
- notacja infiksowa
Poruszanie się po drzewie w porządku preorder
•3 + 2 5
- notacja prefiksowa
Poruszanie się po drzewie w porządku postorder
325+*
- notacja postfiksowa
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
21
Dokument HTML jako drzewo 1/2
<HTML>
<HEAD>
<TITLE>Publikacja</TITLE>
</HEAD>
<BODY>
<H1>Spis treści</H1>
<UL>
<LI>Wstęp</LI>
<LI>Przebieg badao</LI>
<LI>Rezultaty</LI>
<LI>Wnioski koocowe</LI>
</UL>
<BR>
<I>Data ostatniej aktualizacji:
<B>1 marca 2003</B></I>
</BODY>
</HTML>
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
22
11
2010-11-24
Dokument HTML jako drzewo 2/2
HTML
HEAD
TITLE
BODY
H1
UL
LI
LI
BR
LI
LI
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
I
B
23
Dokument XML jako drzewo
• Język XML:
– pozwala na definiowanie struktury przechowywanych zasobów
danych,
– umożliwia przechowywanie danych,
– pozwala na określenie sposobu przekształcania zgromadzonych
zasobów.
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
24
12
2010-11-24
Magazyn 1/3
<?xml version="1.0" encoding="ISO-8859-2"?>
<?xml-stylesheet type="text/css" href="styl.css"?>
<!DOCTYPE MAGAZYN [
<!ELEMENT NAZWA (#PCDATA)>
<!ELEMENT PRODUCENT (#PCDATA)>
<!ELEMENT CENA (#PCDATA)>
<!ELEMENT TOWAR (NAZWA, PRODUCENT?, CENA)>
<!ELEMENT TYTUL (#PCDATA)>
<!ELEMENT MAGAZYN (TYTUL?,TOWAR+)>
]>
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
25
Magazyn 2/3
<MAGAZYN>
<TYTUL>STAN MAGAZYNU</TYTUL>
<TOWAR>
<NAZWA>Chleb wiejski</NAZWA>
<PRODUCENT>Piekarnia "Tradycyjna"</PRODUCENT>
<CENA>1.70</CENA>
</TOWAR>
<TOWAR>
<NAZWA>Masło domowe</NAZWA>
<PRODUCENT>Społdzielnia Mleczarska</PRODUCENT>
<CENA>2.50</CENA>
</TOWAR>
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
26
13
2010-11-24
Magazyn 3/3
<TOWAR>
<NAZWA>Masło domowe</NAZWA>
<PRODUCENT>Społdzielnia
Mleczarska</PRODUCENT>
<CENA>2.50</CENA>
</TOWAR>
<TOWAR>
<NAZWA>Zapałki</NAZWA>
<CENA>0.35</CENA>
</TOWAR>
</MAGAZYN>
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
27
Dokument XML jako drzewo
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
28
14
2010-11-24
Drzewo poszukiwao binarnych
• Drzewo poszukiwao binarnych - drzewo binarne,
etykietowane, w którym dla każdego węzła spełniona jest
następująca zależnośd:
– etykiety węzłów znajdujących się w jego lewym poddrzewie są nie
większe od etykiety przypisanej rozpatrywanemu węzłowi,
– etykiety węzłów znajdujących się w jego prawym poddrzewie są nie
mniejsze od etykiety przypisanej rozpatrywanemu węzłowi.
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
29
Struktura przykładowego drzewa poszukiwao binarnych
5
4
2
6
5
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
8
30
15
2010-11-24
Działania na drzewie poszukiwao binarnych
• Wyświetlanie elementów w sposób uporządkowany - przejście
po drzewie metodą inorder: 2, 4, 5, 5, 6, 8
• Wyznaczanie wartości minimalnej - przejście od korzenia do
liścia, wybierając zawsze lewe poddrzewo: 5, 4, 2
• Wyznaczanie wartości maksymalnej - przejście od korzenia do
liścia, wybierając zawsze prawe poddrzewo: 5, 6, 8
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
31
Wyszukiwanie zadanej wartości w drzewie poszukiwao
binarnych
Wyszukiwanie wartości w drzewie poszukiwao binarnych
szukaj(wartośd, drzewo) {
if (drzewo = null) or (wartośd = etykieta(drzewo))
return drzewo
if (wartośd < etykieta(drzewo)
return szukaj(wartośd, lewePoddrzewo(drzewo))
else
return szukaj(wartośd,prawePoddrzewo(drzewo))
}
Zastosowania:
• struktury słownikowe
• listy przeszukiwanych wartości
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
32
16
2010-11-24
Kodowanie Huffmana
• metoda kompresji bezstratnej (przydatna do kompresji
tekstów, programów),
• metoda ta wykorzystuje różnice w częstościach występowania
poszczególnych znaków w tekście (krótsze kody przypisywane
są znakom częściej się pojawiającym, zaś dłuższe znakom
rzadko występującym),
• metoda ta wykorzystywana jest w popularnych programach
pakujących (np. pkzip, arj).
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
33
Kodowanie Huffmana - przykład
• Załóżmy, że:
– w tekście występują tylko cztery znaki: A, B, C, D,
– długośd tekstu wynosi 1000 znaków
• Przed kompresją:
– do zakodowania jednego znaku potrzebne są 2 bity: A – 00; B – 01; C –
10; D – 11
– do zakodowania tekstu o długości 1000 znaków potrzeba 2000 bitów.
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
34
17
2010-11-24
...
• Wyznacza się częstości wystąpienia każdego ze znaków
–
–
–
–
A
B
C
D
(45%)
(15%)
(35%)
(5%)
• Porządkuje się elementy względem częstości występowania
(od najrzadziej do najczęściej występującego)
–
–
–
–
D
B
C
A
(5%)
(15%)
(35%)
(45%)
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
35
...
• w kolejnych krokach pobiera się dwa najrzadziej występujące
elementy, łączy w jeden i umieszcza na odpowiedniej pozycji
listy
– krok 1 – połączenie elementów D i B
• (D, B) (20%)
• C
• A
(35%)
(45%)
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
36
18
2010-11-24
...
• krok 2 – połączenie (D, B) i C
– A
– ((D, B), C)
(45%)
(55%)
• krok 3 – połączenie A i ((D, B), C)
– (A, ((D, B), C))
(100%)
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
37
...
• kody znaków wyznaczają ścieżkę prowadzącą od korzenia do
danego znaku (0 – lewa gałąź, 1 – prawa gałąź)
–
–
–
–
A–0
B – 101
C – 11
D – 100
A
C
D
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
B
38
19
2010-11-24
...
• Długośd tekstu zakodowanego:
–
–
–
–
–
A: 1 * 0.45 * 1000 =
B: 3 * 0.15 * 1000 =
C: 2 * 0.35 * 1000 =
D: 3 * 0.05 * 1000 =
SUMA:
450 bitów
450 bitów
700 bitów
150 bitów
1750 bitów
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
39
Dodawanie elementów do drzewa
Dodawane elementy: 5, 4, 2, 5, 6, 8
kolejnośd losowa
Drzewo zrównoważone
5
4
2
6
5
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
8
40
20
2010-11-24
Dodawanie elementów do drzewa
kolejnośd wynikająca
z uporządkowania
elementów
Dodawane elementy: 2, 4, 5, 5, 6, 8
2
4
5
Drzewo niezrównoważone
5
6
8
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
41
Drzewa czerwono-czarne
•
•
•
•
•
każdy węzeł ma jeden z dwóch kolorów: czerwony lub czarny,
korzeo ma kolor czarny,
każdy pusty liśd (NIL) jest czarny,
synowie czerwonego wierzchołka są czarni,
każda ścieżka z korzenia do jakiegokolwiek liścia zawiera tą
samą liczbę czarnych węzłów (czarna wysokośd).
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
42
21
2010-11-24
Przykładowe drzewo czerwono-czarne
drzewo czerwono-czarne jest
w przybliżeniu drzewem zrównoważonym
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
43
Niezachowanie własności drzew czerwono-czarnych
• Niezachowanie własności drzew czerwono-czarnych
powoduje, że drzewo traci charakter zrównoważony
• Przyczyną niezachowania własności jest:
– wstawienie,
– usunięcie elementu.
• W celu przywrócenia własności stosuje się metodę:
– rotacji,
– ponownego kolorowania węzłów (przekolorowywania)
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
44
22
2010-11-24
Rotacja
Rotacja zachowuje porządek inorder węzłów drzewa
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
45
Dodawanie elementu do drzewa
• Określenie położenia nowego elementu – jak w drzewie
poszukiwao binarnych
• Przypisanie nowemu elementowi koloru czerwonego:
– Jeżeli rodzic wstawionego węzła jest czarny to własnośd drzewa została
zachowana.
– Jeżeli rodzic wstawionego węzła jest czerwony to własnośd drzewa
została zaburzona (rodzic i syn mają kolor czerwony). Aby przywrócid
własnośd należy przekolorowad niektóre węzły i dokonad rotacji
węzłów
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
46
23
2010-11-24
Implementacja w języku Java
• Klasy TreeSet oraz TreeMap wykorzystują drzewa czerwonoczarne do przechowania uporządkowanych zbiorów
elementów (bez powtórzeo)
Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie
47
24

Podobne dokumenty