Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

ALGORYTMY I STRUKTURY DANYCH Kopiec. Kopiec czyli sterta, czyli heap Kopcem nazywamy doskonałe drzewo binarne częściowo uporządkowane. Drzewo binarne.

Podobne prezentacje


Prezentacja na temat: "ALGORYTMY I STRUKTURY DANYCH Kopiec. Kopiec czyli sterta, czyli heap Kopcem nazywamy doskonałe drzewo binarne częściowo uporządkowane. Drzewo binarne."— Zapis prezentacji:

1 ALGORYTMY I STRUKTURY DANYCH Kopiec

2 Kopiec czyli sterta, czyli heap Kopcem nazywamy doskonałe drzewo binarne częściowo uporządkowane. Drzewo binarne jest kopcem wtedy i tylko wtedy, gdy: 1)D jest drzewem częściowo uporządkowanym: e(i) < e(i.lewy) i e(i)< e(i.prawy) 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.

3 Przykład kopca 1 5 2 43 7 8 910 To nie jest kopiec, bo nie jest to drzewo doskonałe(chociaż jest to drzewo cz. uporządkowane) 1 7 4 23 5 8 910 To nie jest kopiec, bo nie jest to drzewo częściowo uporządkowane (chociaż jest to drzewo doskonałe) 1 5 2 43 7 8 9 106 Kopiec 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.

4 Wstawianie elementu 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. Zadanie: Do zbioru etykiet danego kopca D dołączyć nową etykietę e, czyli wykonać operację insert(D,e)

5 Przykład - dołączanie nowego elementu 1 5 2 43 7 8 9 106 Po dołączeniu nowego wierzchołka 0 1 5 2 43 7 8 9 1060 Zero „wędruje” wzdłuż drogi do korzenia 3 02 01 0

6 Usuwanie minimum 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.

7 Przykład - usuwanie minimum 0 5 1 43108 9 762012 1 3 6 Usuwamy najmniejszy element zbioru.

8 Zastosowanie 1) Z danego n elementowego zbioru utworzyć kopiec. 2) Dopóki kopiec nie jest pusty, wypisywać i usuwać element minimalny kopca. Algorytm sortujący

9 Implementacja kopca w tablicy Reprezentujemy kopiec jako parę Tab + n Organizacja elementów w tablicy: Tab[1] = etykieta korzenia Tab[2i] = etykieta lewego syna wierzchołka i-tego o ile 2i  n Tab[2i+1] = etykieta prawego syna wierzchołka i-tego o ile 2i+1  n tablica etykiet aktualna liczba elementów w tablicy

10 Przykład 1 5 2 43 7 8 9 106 Kopiec 12543789106 Tab: n : 10 1 2 3 4 5 6 7 8 9 10 Reprezentacja tablicowa kopca

11 Operacja insert w implementacji tablicowej Kopiec D 5 12 7 108 14 19 16 911 20 571210814191691120 1 2 3 4 5 6 7 8 9 10 11 Tab: Insert(D,3) 571210814191691120 1 2 3 4 5 6 7 8 9 10 11 Tab: 3 12 37510812191691120 1 2 3 4 5 6 7 8 9 10 11 Tab: 14 12 3 14 312 35 3

12 Konstrukcja kopca w tablicy Założenie: Znamy z góry liczbę elementów tworzonego kopca. AB i 2i2i+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] { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/31/9812723/slides/slide_12.jpg", "name": "Konstrukcja kopca w tablicy Założenie: Znamy z góry liczbę elementów tworzonego kopca.", "description": "AB i 2i2i+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]

13 Algorytm tworzenia kopca For i:= n div 2 downto 1 do downheap(i) od; 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 tab[j+1] )then j := j+1 fi fi; if v { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/31/9812723/slides/slide_13.jpg", "name": "Algorytm tworzenia kopca For i:= n div 2 downto 1 do downheap(i) od; 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 tab[j+1] )then j := j+1 fi fi; if v

14 Przykładowy program #include #include #include using namespace std; int main() { int* dane; //wskaznik na inty, to bedzie nasza tablica :) int n; // ilosc intow, ktore dostaniemy cout > n; dane = new int[n]; //tworzymy n-elementowa tablice cout > dane[i]; // pobieramy inta vector vec(dane, dane+n); //tworzymy wektor przechowujacy elementy tablicy, tak latwiej bedzie :) make_heap(vec.begin(), vec.end()); //tworzymy kopiec for(vector ::iterator i = vec.begin(); i != vec.end(); i++) { cout << *i << ", "; //wypisujemy wszystkie elementy kopca, po kolei } system („pause”); return 0; }

15 Przykład - konstrukcja kopca 5 1 7 62 8 4 3 9 571628439 Tab: 1 2 3 4 5 6 7 8 9 To są liście 571628439 Tab: 1 2 3 4 5 6 7 8 9 571328469 Tab: 1 2 3 4 5 6 7 8 9 571328469 Tab: 1 2 3 4 5 6 7 8 9 521378469 Tab: 1 2 3 4 5 6 7 8 9 125378469 Tab: 1 2 3 4 5 6 7 8 9


Pobierz ppt "ALGORYTMY I STRUKTURY DANYCH Kopiec. Kopiec czyli sterta, czyli heap Kopcem nazywamy doskonałe drzewo binarne częściowo uporządkowane. Drzewo binarne."

Podobne prezentacje


Reklamy Google