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 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) 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 Po dołączeniu nowego wierzchołka Zero „wędruje” wzdłuż drogi do korzenia

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 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 Kopiec Tab: n : Reprezentacja tablicowa kopca

11 Operacja insert w implementacji tablicowej Kopiec D Tab: Insert(D,3) Tab: Tab:

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]

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

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 Tab: To są liście Tab: Tab: Tab: Tab: Tab:


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