7

Click here to load reader

Algoritmul HeapSort

Embed Size (px)

Citation preview

Page 1: Algoritmul HeapSort

Algoritmul HeapSort. –Structuri si algoritmi de prelucrarea datelor.

Algoritmul HeapSort.

Este un algoritm, care a primit denumirea de aranjarea piramidala (HeapSort). Ideea sa, consta din: in loc de completare aborele se formeaza un sir a[1], a[2],…,a[n] aranjat in piramida , aranjarea consta ca fiecare a[i] sa indeplineasca conditia a[i]<=a[2i]si a[i]<=a[2i+1]. Apoi piramida se foloseste pentru aranjare. Cea mai clara metoda de constructi a piramidei,se uita la aranjarea sirul intr-un arbore, prezentat in fig.2.9. Sirul este reprezentat ca arbore binar a carui virf corespunde cu elimentul sirului a[1]. La nivelul doi se gasesc elementele a[2]si a[3]. La nivelul trei a[4],a[5], a[6] a[7] si asa mai departe. Se observa ca petru un sir cu un numar impar de elemente, arborele va fi echilibrat, dar pentr-un un sir cu un numar par de elimente, n elimente a[n] va fi in partea stinga a foii asemanator cu un arbore

Fig2.9

În mod evident,la construirea piramidei suntem interesati de elementele a[n / 2], a[n/2-1], ..., a[1] pentru sirurii cu un număr par de elemente, și elementele a[(n-1) 2], a[(n-1) / 2-1], ...,a[1] pentru sirurii cu un număr impar de elemente (ca numai aceste sunt elemente esențiale pentru a

a1=8

a2=23

a5=44a4=65

a8=6

a3=5

a6=33 a7=1

Pasul 0

Page 2: Algoritmul HeapSort

limita piramida). Fie i cel mai mare indice, printre indicii de elemente care sunt limitări importante ale piramidei. Apoi se ia elementul a[i] din arborele,apoi urmeaza procedura de screening(depistare), care constă în faptul că ramura a arborelui este selectata corespunzator, min (a[2i], a[2i+1]), precum și valoarea a[i] este schimbata cu valoarea elementului corespunzător. Dacă acest element nu este o ramura arborelui, pentru el se face aceiasi procedură etc. Aceste acțiuni sunt realizate succesiv pentru a [i], a [i-1], ..., a [1]. Este ușor de observat că rezultatul este o vizualizare arborescentă a piramidei pentru sirul original (succesiune de etape utilizate în exemplele de sir este prezentată în figurile 2.10 - 2.13).

Fig. 2.10.

a1=8

a2=23

a5=44a4=6

a8=65

a3=5

a6=33 a7=1

Pasul 1

Page 3: Algoritmul HeapSort

Fig. 2.11

Fig. 2.12.

a1=8

a2=23

a5=44a4=6

a8=65

a3=1

a6=33 a7=5

a1=8

a2=6

a5=44a4=23

a8=65

a3=1

a6=33 a7=5

Pasul 2

Pasul 3

Page 4: Algoritmul HeapSort

Fig. 2.13.

În 1964, Floyd a propus o metoda de a construi o piramida, fără construirea explicită a arborelui (deși metoda se bazează pe aceleași idei.)Construirea de piramide de Floyd pentru sirul noastru standard, se arată în tabelul

Тabelul 2.7 Exemplu de construiere a piramidei

Starea initiala a sirului 8 23 5 |65| 44 33 1 6

Pasul 1 8 23 |5| 6 44 33 1 65

Pasul 2 8 |23| 1 6 44 33 5 65

Pasul 3 |8| 6 1 23 44 33 5 65

Pasul 41 6 8 23 44 33 5 65

1 6 5 23 44 33 8 65

Tabelul 2.8 arată cum să sortați utilizând piramide construite.Esența algoritmului este `1urmatoarea. Fie i - cel mai mare indice a sirului, pentru care sunt semnificativ condițiile de piramida. Apoi, incepind cu a[1]pina la a[i],se efectuiaza următoarele acțiuni. La fiecare pas, se alege ultimul element al piramidei (în cazul nostru, primul element este selectat a[8]). Se schimba cu locul cu a[1], apoi pentru a[1]se utilizeaza de screening(depistarea). La fiecare pas, numărul de elemente din piramida este redus cu 1 (după prima etapă a piramidei sunt considerate ca elemente ale a[1], a[2], ..., a [n-1], după a două a[1] a[2], ..., a [n-2], și așa mai departe, până când piramida ramine doar un element). Este ușor de vazut acest lucru (ilustrat în Tabelul 2.8), care rezultatul va fi un sir aranjat în ordine descrescătoare. Aveți posibilitatea să modificați metoda de construcție a piramidelor și sortarea pentru a obține comenzi în ordine crescătoare,

a1=1

a2=6

a5=44a4=23

a8=65

a3=8

a6=33 a7=5

Pasul 4

Page 5: Algoritmul HeapSort

dacă modificați starea unei piramide pe a[i]> = a[2i] si a[1]> = a[2i+1] pentru toate valorile semnificative a indicelui i..

Таbelul 2.8 Sortarea cu ajutorul piramidei

Piramida initiala 1 6 5 23 44 33 8 65

Pasul 1

65 6 5  23 44 33 8  1

5  6 65 23 44 33 8  1

5  6 8  23 44 33 65 1

Pasul 2

65 6  8 23 44 33 5 1

6  65 8 23 44 33 5 1

6  23 8 65 44 33 5 1

Pasul 333 23 8 65 44 6 5 1

8 23 33 65 44 6 5 1

Pasul 444 23 33 65 8 6 5 1

23 44 33 65 8 6 5 1

Pasul 565 44 33 23 8 6 5 1

33 44 65 23 8 6 5 1

Pasul 665 44 33 23 8 6 5 1

44 65 33 23 8 6 5 1

Pasul 7 65 44 33 23 8 6 5 1

Algoritmul sortari utilizand o piramida necesita îndeplinirea ordinea de trepte nxlog n (log - binar) în cel mai rau caz, ceea ce îl face deosebit de atractiv pentru sortarea tablouri mari.