Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

ALGORYTMY I STRUKTURY DANYCH

Podobne prezentacje


Prezentacja na temat: "ALGORYTMY I STRUKTURY DANYCH"— Zapis prezentacji:

1 ALGORYTMY I STRUKTURY DANYCH
WYKŁAD 09 Kopiec Grażyna Mirkowska PJWSTK, 2003/2004

2 G. Mirkowska, ASD_9 Kopiec
Plan wykładu Kopiec (sterta) Definicja Operacja wkładania elementu do kopca Usuwanie elementu minimalnego Koszty operacji Zastosowanie - algorytm Heap_sort Implementacja kopca w tablicy Konstrukcja kopca w tablicy Przykład Koszt konstrukcji kopca maj 2003 G. Mirkowska, ASD_9 Kopiec

3 Kopiec czyli sterta, czyli heap
Kopcem nazywamy etykietowane, doskonałe drzewo binarne częściowo uporządkowane. Definicja Etykietowane drzewo binarne D = <V, E, et> jest kopcem wtedy i tylko wtedy, gdy (1) D jest drzewem częściowo uporządkowanym: et(v) < et(v.lewy) i et(v)< et(v.prawy) dla wszystkich wierzchołków v V, (2) D jest drzewem doskonałym: wszystkie poziomy drzewa, z wyjątkiem co najwyżej ostatniego poziomu, są maksymalnie zapełnione, a na ostatnim poziomie wszystkie liście są zgrupowane maksymalnie na lewo. maj 2003 G. Mirkowska, ASD_9 Kopiec

4 G. Mirkowska, ASD_9 Kopiec
Przykład kopca 1 7 4 2 3 5 8 9 10 1 5 2 4 3 7 8 9 10 6 Kopiec 1 5 2 4 3 7 8 9 10 Własności: 1. Etykiety na dowolnej drodze od korzenia do liścia tworzą ciąg uporządkowany rosnąco. 2. Element najmniejszy wśród etykiet wierzchołków znajduje się w korzeniu drzewa. To nie jest kopiec , bo nie jest to drzewo doskonałe(chociaż jest to drzewo cz. uporządkowane) To nie jest kopiec , bo nie jest to drzewo częściowo uporządkowane (chociaż jest to drzewo doskonałe) maj 2003 G. Mirkowska, ASD_9 Kopiec

5 G. Mirkowska, ASD_9 Kopiec
Wstawianie elementu Insert : Heap  Et  Heap Zadanie: Do zbioru etykiet danego kopca D dołączyć nową etykietę e, czyli wykonać operację insert(D,e) (1) Dowiązać nowy wierzchołek x do pierwszego z lewej wierzchołka na przedostatnim poziomie drzewa, którego rząd jest <2. (2) Nadać nowemu wierzchołkowi etykietę e. (3) Jeżeli tak otrzymane drzewo nie jest częściowo uporządkowane, to przechodząc wzdłuż drogi od liścia x do korzenia, poprawić etykiety zamieniając etykietę ojca z etykietą syna, jeśli etykieta ojca jest większa niż etykieta syna. maj 2003 G. Mirkowska, ASD_9 Kopiec

6 Przykład - dołączanie nowego elementu
1 5 2 4 3 7 8 9 10 6 1 5 2 4 3 7 8 9 10 6 1 2 3 Po dołączeniu nowego wierzchołka Zero „wędruje” wzdłuż drogi do korzenia maj 2003 G. Mirkowska, ASD_9 Kopiec

7 G. Mirkowska, ASD_9 Kopiec
Usuwanie minimum delmin : Heap  Heap Niech e będzie etykietą liścia x znajdującego się najbardziej na prawo na ostatnim poziomie kopca. (1) Usunąć wierzchołek x z drzewa d. (2) Zastąpić etykietę w korzeniu drzewa przez e. (3) Jeśli tak otrzymane drzewo nie jest kopcem, to zaczynając od korzenia i idąc w kierunku liścia, zamieniać etykietę ojca z etykietą tego z jego synów, którego etykieta ma mniejszą wartość, tak długo aż zostanie otrzymane drzewo częściowo uporządkowane. Algorytm maj 2003 G. Mirkowska, ASD_9 Kopiec

8 Przykład - usuwanie minimum
Usuwamy najmniejszy element zbioru. 12 1 5 1 4 3 10 8 9 7 6 20 12 3 12 12 6 pokaz 12 maj 2003 G. Mirkowska, ASD_9 Kopiec

9 G. Mirkowska, ASD_9 Kopiec
Koszty operacji h-1 h n - wierzchołków Mamy Wniosek Koszt operacji insert i delmin wynosi O( lg(n+1) ). Stąd 2 h -1 < n  2 h+1 -1 Czyli 2 h < n +1  2 h+1 lg(n+1)-1  h < lg (n+1) Ostatecznie h=  lg(n+1)  maj 2003 G. Mirkowska, ASD_9 Kopiec

10 G. Mirkowska, ASD_9 Kopiec
Zastosowanie Algorytm Heap_sort (1) Z danego n elementowego zbioru utworzyć kopiec. (2) Dopóki kopiec nie jest pusty, wypisywać i usuwać element minimalny kopca. O ile wkładamy kolejno elementy stosując operację insert : O(n lg n) Algorytm Koszt sortowania = koszt utworzenia kopca + n * O(lg n) = O(n lg n) maj 2003 G. Mirkowska, ASD_9 Kopiec

11 Implementacja kopca w tablicy
Reprezentujemy kopiec jako parę Tab + idx tablica etykiet aktualna liczba elementów w tablicy Organizacja elementów w tablicy: Tab[1] = etykieta korzenia Tab[2i] = etykieta lewego syna wierzchołka i-tego o ile 2i  idx Tab[2i+1] = etykieta prawego syna wierzchołka i-tego o ile 2i+1 idx maj 2003 G. Mirkowska, ASD_9 Kopiec

12 G. Mirkowska, ASD_9 Kopiec
Przykład 1 5 2 4 3 7 8 9 10 6 Kopiec Reprezentacja tablicowa kopca 1 2 5 4 3 7 8 9 10 6 Tab: n : 10 maj 2003 G. Mirkowska, ASD_9 Kopiec

13 Operacja insert w implementacji tablicowej
5 12 7 10 8 14 19 16 9 11 20 3 5 7 12 10 8 14 19 16 9 11 20 Tab: 5 3 Insert(D,3) 5 7 12 10 8 14 19 16 9 11 20 Tab: 3 12 3 3 14 Kopiec D 3 7 5 10 8 12 19 16 9 11 20 Tab: 14 maj 2003 G. Mirkowska, ASD_9 Kopiec

14 Delmin w implementacji tablicowej
3 5 7 10 8 12 19 16 9 11 20 14 5 14 3 7 5 10 8 12 19 16 9 11 20 Tab: 14 14 12 Delmin(D) 14 14 7 5 10 8 12 19 16 9 11 20 Tab: 5 7 12 10 8 14 19 16 9 11 20 Tab: Ostatecznie : maj 2003 G. Mirkowska, ASD_9 Kopiec

15 Konstrukcja kopca w tablicy
Założenie: Znamy z góry liczbę elementów tworzonego kopca. A B i 2i 2i+1 1.Tworzymy tablicę zawierającą wszystkie elementy. 2.Jeżeli są już utworzone kopce A i B o korzeniach w 2itej i 2i+1szej pozycji, to albo tab[i] <tab[2i] oraz tab[i]<tab[2i+1] i wtedy mamy już kopiec o korzeniu w i, albo tak nie jest i wtedy poprawiamy ścieżkę „w dół” tak jak w algorytmie delmin. Metoda maj 2003 G. Mirkowska, ASD_9 Kopiec

16 Algorytm tworzenia kopca
Procedure downheap (k:integer); /* utwórz kopiec o korzeniu w pozycji k zakładając, że 2k i 2k+1 są korzeniami kopców w tablicy*/ begin v := tab[k]; while (k n div 2 ) do j := 2*k; if (j<n) then if (tab[j] > tab[j+1] )then j := j+1 fi fi; if v<tab[j] then exit fi; tab[k] := tab[j]; k := j; od; tab[k] := v; end; For i:= n div 2 downto 1 do downheap(i) od; maj 2003 G. Mirkowska, ASD_9 Kopiec

17 Przykład - konstrukcja kopca
5 1 7 6 2 8 4 3 9 5 7 1 6 2 8 4 3 9 Tab: To są liście 5 7 1 6 2 8 4 3 9 Tab: 5 7 1 3 2 8 4 6 9 Tab: 5 2 1 3 7 8 4 6 9 Tab: 5 7 1 3 2 8 4 6 9 Tab: 1 2 5 3 7 8 4 6 9 Tab: maj 2003 G. Mirkowska, ASD_9 Kopiec

18 Koszt konstrukcji kopca
Załóżmy, że n jest liczbą elementów w kopcu, a h jego wysokością. W(n) = lw * lp liczba wierzchołków które trzeba być może poprawić liczba porównań, które trzeba wtedy wykonać Co najwyżej dwa porównania dla każdego elementu na ścieżce do liścia. Tu może przytoczyć dokładny rachunek Gdyby to było pełne drzewo binarne Razem W(n) = O(n) Nie trzeba poprawiać liści Liczba wierzchołków na poziomie h-i maj 2003 G. Mirkowska, ASD_9 Kopiec


Pobierz ppt "ALGORYTMY I STRUKTURY DANYCH"

Podobne prezentacje


Reklamy Google