Struktury danych: Drzewa

Transkrypt

Struktury danych: Drzewa
Struktury danych: Drzewa
11/23/2005
Co to jest drzewo?
Struktury danych:
Drzewa
!
Drzewo to struktura danych, która odpowiada na
przykład strukturze organizacyjnej rządu
!
Co to są drzewa?
Nomenklatura drzew
Drzewa binarne
Organizacja drzew binarnych
!
!
!
Premier jest w wierzchołku
Poniżej są ministrowie
Jeszcze niżej są wiceministrowie i sekretarze stanu
Dodatkowe ograniczanie
!
!
Nikt nie podlega dwóm przełożonym
Różne gałęzie nie będą się łączyć na niższym poziomie
2/12
Rząd…
©2005 R. Robert ‘RoG@j’ Gajewski
Nomenklatura drzewa
!
PREMIER
!
Każdy element drzewa to węzeł
Węzeł w wierzchołku to korzeń
!
MINISTER
EDUKACJI
!
MINISTER
PRACY
!
V1-MINISTER
EDUKACJI
V2-MINISTER
EDUKACJI
!
V1-MINISTER
PRACY
3/12
©2005 R. Robert ‘RoG@j’ Gajewski
4/12
Nomenklatura rodzinna
!
!
!
!
!
©2005 R. Robert ‘RoG@j’ Gajewski
Drzewa binarne
Bezpośredni `potomkowie` węzła to jego dzieci
Bezpośredni przodek węzła to jego rodzic
Węzły o tym samym ojcu to rodzeństwo
Głębokość drzewa, to liczba węzłów na najdłuższej
ścieżce od korzenia do pewnego liścia
!
!
!
!
Głębokość drzewa, to liczba jego poziomych warstw
Drzewo binarne to takie drzewo, w którym każdy
węzeł ma co najwyżej dwoje dzieci
Implementacja następuje za pomocą struktury z
dowiązaniami
Każdy element drzewa ma trzy składowe
!
!
Struktura drzewiasta jest wykorzystywana do
przechowywania informacji, w których trzeba szybko
odnajdywać pewne dane
!
!
!
5/12
Łatwo to sobie wyobrazić, jeśli odwrócimy rysunek drzewa
Węzły znajdujące się po przeciwnych stronach to
liście
Jeśli węzeł wraz z węzłami pod nim tworzy strukturę
drzewiastą, to jest to poddrzewo.
Alternatywnym nazewnictwem dla drzew jest
nazewnictwo rodzinne
©2005 R. Robert ‘RoG@j’ Gajewski
(C)2005 R. Robert "RoG@j" Gajewski
6/12
Dane
Wskaźnik do pierwszego dziecka
Wskaźnik do drugiego dziecka
Pierwsze dziecko – lewe dziecko
Drugie dziecko – prawe dziecko
©2005 R. Robert ‘RoG@j’ Gajewski
1
Struktury danych: Drzewa
11/23/2005
Organizacja pojęciowa
drzewa binarnego
Implementacja drzewa
!
!
!
!
!
!
A
Trzeba znaleźć wolne bloki w pamięci, dla
zapamiętania drzewa
Następnie należy odpowiednio ustawić wskaźniki
Węzły są liśćmi, jeśli oba wskaźniki są NIL
Trzeba jeszcze zarezerwować miejsce na wskaźnik
korzenia – adres węzła, znajdującego się w
korzeniu drzewa
7/12
©2005 R. Robert ‘RoG@j’ Gajewski
D
©2005 R. Robert ‘RoG@j’ Gajewski
!
NIL
F
B
D
NIL
NIL
NIL
!
NIL
9/12
!
NIL
©2005 R. Robert ‘RoG@j’ Gajewski
W tej koncepcji oszczędzamy na pamiętaniu
wskaźników, ale pamiętamy niestety „puste” dzieci
©2005 R. Robert ‘RoG@j’ Gajewski
Odśmiecanie
!
!
Jeśli drzewo jest bogate, każdy rodzic ma dzieci, to
jest to dobry sposób pamiętania drzewa binarnego
Jeśli drzewo jest niezrównoważone przechowywanie
go bez użycia wskaźników jest mało efektywne
!
Proces odzyskiwania nieużywanej przestrzeni
zajmowanej przez np. drzewa nosi nazwę
odśmiecania
Problemem jest to, czy miejsce do którego prowadzi
wskaźnik można na pewno skasować czy nie
!
!
©2005 R. Robert ‘RoG@j’ Gajewski
(C)2005 R. Robert "RoG@j" Gajewski
12/12
Błędna decyzja może spowodować utratę danych
Z drugiej strony...
!
11/12
Dziecko lewe będzie w komórce 2n
Dziecko prawe będzie w komórce 2n+1
10/12
Wada alternatywy…
!
Alternatywą dla reprezentacji dowiązaniowej drzew
binarnych jest technika polegająca na
zarezerwowania ciągłego obszaru pamięci i
zapamiętaniu adresu do korzenia
Dla węzła n…
!
NIL
!
E
F
Alternatywa
WSKAŹNIK
KORZENIA
C
E
8/12
Organizacja rzeczywista
drzewa binarnego
A
C
B
Mają one wskazywać lewe lub praw dziecko
Jeśli nie wskazują na nic to mają wartość NIL
Jeśli nie będziemy odzyskiwać pamięci dostępna
przestrzeń będzie maleć – określane jest to mianem
wycieku pamięci
©2005 R. Robert ‘RoG@j’ Gajewski
2