Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

pseudokody algorytmów

Podobne prezentacje


Prezentacja na temat: "pseudokody algorytmów"— Zapis prezentacji:

1 pseudokody algorytmów
DRZEWA pseudokody algorytmów

2 void traverse(link h, void visit(link)) { if (h == 0) return;
Rekurencyjne przechodzenie przez drzewo – Funkcje rekurencyjne pobierają jako argument łącze do drzewa i wywołują funkcję visit, której argumentem jest węzeł drzewa. PREORDER void traverse(link h, void visit(link)) { if (h == 0) return; visit(h); traverse(h->l, visit); traverse(h->r, visit); }

3 INORDER void traverse(link h, void visit(link)) { if (h == 0) return; traverse(h->l, visit); visit(h); traverse(h->r, visit); }

4 POSTORDER void traverse(link h, void visit(link)) { if (h == 0) return; traverse(h->l, visit); traverse(h->r, visit); visit(h); }

5 Nierekurencyjne przechodzenie przez drzewo
(postorder) void traverse(link h, void visit(link)) { STACK<link> s(max); s.push(h); while (!s.empty()) { visit(h = s.pop()); if (h->r != 0) s.push(h->r); if (h->l != 0) s.push(h->l); }

6 Przechodzenie za pomocą przekształcania drzewa - algorytm Josepha M
Przechodzenie za pomocą przekształcania drzewa - algorytm Josepha M.Morrisa (inorder) while nie koniec if węzeł nie ma lewego syna { odwiedź go; idź w prawo; } else uczyń go prawym synem jego poprzednika; idź do korzenia tego poddrzewa;

7 void balance ( dane [ ], int pocz, int kon)
{ if (pocz <= kon) int m=(pocz+kon)/2; wstaw (dane[m]); balance (dane,pocz,m-1); balance (dane, m+1,kon); }

8 rotacjaprawa (S,O) // można wykonać na węźle dla
rotacjaprawa (S,O) // można wykonać na węźle dla // którego istnieje lewy syn { if O nie jest korzeniem zastępujemy O przez S; prawe poddrzewo S staje się lewym poddrzewem O; węzeł O staje się prawym synem węzła S; } D D O S S A B O B C C A

9 Pierwszy etap algorytmu DSW – prostowanie drzewa.
Utwórz_winorośl (korzeń, n) // prawe rotacje na węzłach // mających lewych synów { tmp = korzeń; while (tmp != NULL) if tmp ma lewego syna wykonaj rotację tego syna względem tmp; tmp = węzeł, który został ojcem; } else tmp = węzeł, który jest prawym synem tmp; Pierwszy etap algorytmu DSW – prostowanie drzewa.

10 Drugi etap - tworzenie drzewa doskonale zrównoważonego
W każdym przejściu w dół winorośli co drugi węzeł aż do pewnego miejsca jest rotowany w lewo wokół swego rodzica. Pierwsze przejście jest potrzebne, aby uzyskać różnicę liczby węzłów w winorośli i liczby węzłów w najbliższym pełnym drzewie binarnym. Utwórz_drzewo_doskonałe (n) { m = ; wykonaj n-m rotacji od korzenia; while (m>1) m=m/2; wykonaj m rotacji od korzenia; }

11 Algorytm wstawiania elementu do kolejki
Wstawianie elementu do kolejki realizowane jest jako dodanie do kopca ostatniego liścia; potem następuje odtworzenie własności kopca (poprzez przesuwanie ostatniego liścia ku korzeniowi dopóki nie dojdzie do korzenia lub nie trafi na ojca o mniejszej wartości). WstawDoKolejki (el) { wstaw el na koniec kopca (jako ostatni liść); while ( el nie jest korzeniem i el > rodzic(el) ) zamień miejscami el i rodzic(el); }

12 Algorytm pobierania elementu z kolejki
Pobieranie elementu z kolejki polega na pobraniu elementu z korzenia, zastąpieniu go ostatnim liściem i odtworzeniu własności kopca idąc od korzenia w dół. PobierzZKolejki ( ) { pobierz element z korzenia; wstaw do korzenia element z ostatniego liścia; usuń ostatni liść; //obydwa poddrzewa korzenia są kopcami p=korzeń; while ( p nie jest liściem i p < któregokolwiek swojego dziecka) zamień miejscami p i jego większe dziecko; }


Pobierz ppt "pseudokody algorytmów"

Podobne prezentacje


Reklamy Google