Вы находитесь на странице: 1из 22

Algoritmul HeapSort

HeapSort este unul din algoritmii de sortare foarte performanti, fiind de clasa O(Nlog2N) Mai este cunoscut sub denumirea de sortare prin metoda ansamblelor Desi nerecursiv, este aproape la fel de performant ca si algoritmii de sortare recursivi (QuickSort fiind cel mai cunoscut) HeapSort este un algoritm de sortare in situ, adica nu necesita structuri de date suplimentare, ci sortarea se face folosind numai spatiul de memorie al tabloului ce trebuie sortat Exista si implementari HeapSort care nu sunt in situ
Calin Jebelean Algoritmul HeapSort 1

Algoritmul HeapSort
Algoritmul se aseamana, in unele privinte, cu sortarea prin selectie (SelSort) La fiecare pas, cel mai mic element din tablou este gasit si mutat in spatele tabloului, fiind ignorat de pasii urmatori, care vor continua pe restul tabloului Diferenta fata de SelSort este ca pasii urmatori ai algoritmului vor depune un efort mai mic (chiar mult mai mic) pentru a depista minimul din tabloul ramas Fiecare pas al algoritmului are darul de a usura sarcina pasilor ce urmeaza, ceea ce duce la performanta foarte buna a algoritmului
Calin Jebelean Algoritmul HeapSort 2

Algoritmul HeapSort
Gasirea minimului din tablou, operatie ce are loc la fiecare pas, se bazeaza pe aducerea tabloului la forma de ansamblu Un ansamblu este un sir Ai (i = 1 N) care indeplineste urmatoarele conditii pentru fiecare i: Ai A2i Ai A2i+1 Evident, pentru valori ale lui i mai mari decat N/2 nu se pune problema indeplinirii conditiilor de mai sus

Calin Jebelean

Algoritmul HeapSort

Algoritmul HeapSort
Orice tablou poate fi transformat usor intr-un arbore binar

Index:

2 A2

3 A3

4 A4 A1

5 A5

6 A6

7 A7

8 A8

9 A9

A: A1

A2

A3

A4
A8
Calin Jebelean

A5
A9

A6

A7

Algoritmul HeapSort

Algoritmul HeapSort
Daca tabloul era ansamblu, se observa ca arborele binar obtinut indeplineste urmatoarea conditie: fiecare nod are cheia mai mare sau egala cu a tatalui sau. Astfel, A2 si A3 sunt mai mari sau egale cu A1, A4 si A5 sunt mai mari sau egale cu A2, s. a. m. d. Dar A1 este radacina arborelui binar, ceea ce inseamna ca A1 trebuie sa fie elementul minim al tabloului Deci intr-un ansamblu, elementul minim se afla intotdeauna pe prima pozitie In cadrul algoritmului HeapSort, daca la fiecare pas aducem tabloul pe care lucram la forma unui ansamblu inseamna ca am localizat in acelasi timp si minimul din tablou
Calin Jebelean Algoritmul HeapSort 5

Algoritmul HeapSort
Aducerea unui tablou la forma de ansamblu se face urmarind situatii cum este cea descrisa mai jos:
Index: A: 1 A1 i Ai 2i A2i 2i+1 A2i+1 N AN

Daca nu este indeplinita una din conditiile Ai A2i si Ai A2i+1 atunci se va interschimba Ai cu minimul dintre A2i si A2i+1 Elementele astfel interschimbate vor indeplini conditia de ansamblu Pentru o eficienta cat mai mare, urmarirea acestui gen de situatii trebuie facuta de la dreapta la stanga, in caz contrar fiind nevoie de reveniri repetate chiar si dupa ce o situatie de neconcordanta a fost rezolvata
Calin Jebelean Algoritmul HeapSort 6

Algoritmul HeapSort
Vom studia, pas cu pas, modul in care un tablou oarecare poate fi transformat in ansamblu Aceasta transformare se va aplica la fiecare pas in cadrul algoritmului HeapSort, pe un tablou din ce in ce mai mic (deoarece dupa fiecare pas, primul element al tabloului, care este elementul minim, va fi eliminat si pus la pastrare, algoritmul continuand pe restul tabloului) Pentru simplitate, vom lucra pe reprezentarea sub forma de arbore a tabloului:

Index: A:
Calin Jebelean

1 9

2 5

3 1

4 8

5 6

6 4

7 3

8 7

9 2
7

Algoritmul HeapSort

Algoritmul HeapSort
9 5 8 7 2 6 4 1 3

Problema se pune numai pentru noduri neterminale Localizam cel mai de jos nod neterminal, si in caz ca sunt mai multe astfel de noduri, il consideram pe cel mai din dreapta acesta este 8 Cum 8 are fiii 7 si 2 si este mai mare decat ambii, se va interschimba cu cel mai mic dintre ei, adica cu 2
Calin Jebelean Algoritmul HeapSort 8

Algoritmul HeapSort
9 5 2 7 8 6 4 1 3

Urmatorul nod neterminal este 1 (nodul 5 este pe acelasi nivel, dar il alegem intotdeauna pe cel mai din dreapta in astfel de cazuri) Nodul 1 este mai mic decat fiii sai, deci nu va face obiectul vreunei interschimbari Trecand la nodul 5, acesta nu indeplineste conditiile, ca atare va fi interschimbat cu cel mai mic fiu al sau, anume 2
Calin Jebelean Algoritmul HeapSort 9

Algoritmul HeapSort
9 2 5 7 8 6 4 1 3

Inainte de a trece la noul nod neterminal, verificam ca ultimul nod interschimbat (5) sa indeplineasca conditia referitoare la fiii sai (7 si 8) se observa ca o indeplineste Noul nod neterminal este 9 Acesta nu indeplineste conditiile, fiind mai mare si decat 2 si decat 1, ca atare, 9 va fi interschimbat cu cel mai mic, deci cu 1
Calin Jebelean Algoritmul HeapSort 10

Algoritmul HeapSort
1 2 5 7 8 6 4 9 3

S-ar putea ca ultimul nod interschimbat (9) inca sa nu indeplineasca conditiile referitoare la fiii sai, in noua sa locatie 9 fiind mai mare si decat 4 si decat 3, se va interschimba cu 3 (cel mai mic) Astfel de interschimbari repetate vor avea loc pana cand 9 ajunge pe un nivel pe care fiii sai sunt mai mari sau egali cu el (sau pe un nivel unde nu mai are fii)
Calin Jebelean Algoritmul HeapSort 11

Algoritmul HeapSort
1 2 5 7 8 6 4 3 9

9 a ajuns pe un nivel terminal (nu mai are fii) deci nu mai continuam in jos In acest moment, tabloul a ajuns la forma de ansamblu, fiecare nod avand cheia mai mica sau egala decat cheile fiilor sai Cel mai mic element al tabloului a ajuns pe post de radacina Interschimbam radacina cu ultimul element al tabloului, adica 1 cu 8
Calin Jebelean Algoritmul HeapSort 12

Algoritmul HeapSort
8 2 5 7 1 6 4 3 9

Elementul minim (1) se elimina si se adauga la un tablou auxiliar, initial vid, care va contine la final elementele sortate Acesta a fost primul pas al algoritmului de sortare HeapSort Vom studia inca un pas al algoritmului
Calin Jebelean Algoritmul HeapSort 13

Algoritmul HeapSort
Situatia actuala este prezentata mai jos:

8
2 3

5
7 Index: Tablou auxiliar:
Calin Jebelean

6
1 1 1 2 3 -

4 -

5 -

6 -

7 -

8 -

9 14

Algoritmul HeapSort

Algoritmul HeapSort
8 2 5 7
Nodurile neterminale considerate sunt, in ordine: 5, 3, 2 si 8 Datorita pasului anterior, nodurile 5, 3 si 2 indeplinesc conditiile referitoare la fiii lor (pasii anteriori au usurat sarcina pasului curent) Nodul 8 nu indeplineste conditiile, deci va fi interschimbat cu 2

3 6 4 9

Calin Jebelean

Algoritmul HeapSort

15

Algoritmul HeapSort
2 8 5 7
Nici in noua locatie, 8 nu indeplineste conditiile, ca urmare va fi interschimbat cu 5

3 6 4 9

Calin Jebelean

Algoritmul HeapSort

16

Algoritmul HeapSort
2 5 8 7
Nici in noua locatie, 8 nu indeplineste conditiile, ca urmare va fi interschimbat cu 7

3 6 4 9

Calin Jebelean

Algoritmul HeapSort

17

Algoritmul HeapSort
2 5 7 8
8 nu mai are fii, deci ne oprim aici Tabloul a devenit ansamblu, cel mai mic element din tablou ajungand pe post de radacina Interschimbam radacina cu ultimul element al tabloului, adica 2 cu 8

3 6 4 9

Calin Jebelean

Algoritmul HeapSort

18

Algoritmul HeapSort
8 5 7 2
Elementul minim (2) se elimina si se adauga la tabloul auxiliar Acesta a fost al doilea pas al algoritmului de sortare HeapSort

3 6 4 9

Calin Jebelean

Algoritmul HeapSort

19

Algoritmul HeapSort
Situatia actuala este prezentata mai jos:

8
5 3

7
2 Index: Tablou auxiliar:
Calin Jebelean

1 1

2 2

3 -

4 -

5 -

6 -

7 -

8 -

9 20

Algoritmul HeapSort

Algoritmul HeapSort
Repetand algoritmul de transformare a tabloului in ansamblu si eliminand dupa fiecare pas elementul minim obtinut (radacina arborelui), vom obtine in tabloul auxiliar elementele ordonate La fiecare pas, tabloul scade cu un element De asemenea, se poate observa ca la fiecare pas, in afara de radacina arborelui, toate celelalte elemente indeplinesc deja conditia de ansamblu datorita pasului anterior Rezulta ca sarcina fiecarui pas nou este mult usurata de activitatea pasului/pasilor precedenti, ceea ce face ca algoritmul HeapSort sa fie foarte performant
Calin Jebelean Algoritmul HeapSort 21

Algoritmul HeapSort
Algoritmul HeapSort este cel mai slab algoritm de clasa O(Nlog2N) Este mai slab (dar nu cu mult) decat algoritmii din familia QuickSort, dar are marele avantaj fata de acestia ca nu este recursiv Algoritmii recursivi ruleaza rapid, dar consuma o mare cantitate de memorie, ceea ce nu le permite sa sorteze tablouri de dimensiuni oricat de mari HeapSort este un algoritm care impaca viteza cu consumul relativ mic de memorie
Calin Jebelean Algoritmul HeapSort 22

Вам также может понравиться

  • Arbori AVL
    Arbori AVL
    Документ11 страниц
    Arbori AVL
    Moses George
    Оценок пока нет
  • Alocarea Dinamica A Memoriei
    Alocarea Dinamica A Memoriei
    Документ12 страниц
    Alocarea Dinamica A Memoriei
    Isaic Alina
    Оценок пока нет
  • SD Curs-11
    SD Curs-11
    Документ32 страницы
    SD Curs-11
    Smiley Andrei
    Оценок пока нет
  • 08 ArboriEchilibrati PDF
    08 ArboriEchilibrati PDF
    Документ43 страницы
    08 ArboriEchilibrati PDF
    Sin Tetic
    Оценок пока нет
  • Sort Are
    Sort Are
    Документ9 страниц
    Sort Are
    Mega Stat
    Оценок пока нет
  • Lucrarea de Laborator 3 C TP
    Lucrarea de Laborator 3 C TP
    Документ10 страниц
    Lucrarea de Laborator 3 C TP
    Ghincul Vladimir
    Оценок пока нет
  • PCLP
    PCLP
    Документ46 страниц
    PCLP
    Christian CM
    Оценок пока нет
  • Metoda Selectiei
    Metoda Selectiei
    Документ9 страниц
    Metoda Selectiei
    beatricec.2004
    Оценок пока нет
  • C5 Arbori
    C5 Arbori
    Документ19 страниц
    C5 Arbori
    Leslie Nelson
    Оценок пока нет
  • Tema 3. Arbori Binari
    Tema 3. Arbori Binari
    Документ22 страницы
    Tema 3. Arbori Binari
    Alexei Bojenco
    Оценок пока нет
  • Aloc Dinam
    Aloc Dinam
    Документ44 страницы
    Aloc Dinam
    d
    Оценок пока нет
  • STRUCTURI DE DATE Recapitulare
    STRUCTURI DE DATE Recapitulare
    Документ169 страниц
    STRUCTURI DE DATE Recapitulare
    Iuliana
    Оценок пока нет
  • Sortare Prin Inserare
    Sortare Prin Inserare
    Документ10 страниц
    Sortare Prin Inserare
    Alexander
    Оценок пока нет
  • Algoritmi Si Structuri de Date
    Algoritmi Si Structuri de Date
    Документ14 страниц
    Algoritmi Si Structuri de Date
    Alexandru Stroe
    Оценок пока нет
  • SDA.C6-Arbori - Arbori Binari Oarecare - 2020 PDF
    SDA.C6-Arbori - Arbori Binari Oarecare - 2020 PDF
    Документ26 страниц
    SDA.C6-Arbori - Arbori Binari Oarecare - 2020 PDF
    Sebastian Oglage
    Оценок пока нет
  • Cursuri Structuri de Date
    Cursuri Structuri de Date
    Документ106 страниц
    Cursuri Structuri de Date
    Bogdan Daniel
    Оценок пока нет
  • ASD15 Arbori
    ASD15 Arbori
    Документ18 страниц
    ASD15 Arbori
    Husker Dou
    100% (1)
  • Structuri de Date Licenta 2010
    Structuri de Date Licenta 2010
    Документ11 страниц
    Structuri de Date Licenta 2010
    chmro
    Оценок пока нет
  • Arbori Binari BST Functii
    Arbori Binari BST Functii
    Документ5 страниц
    Arbori Binari BST Functii
    Ana-Maria Apopei
    Оценок пока нет
  • LP-NR 4
    LP-NR 4
    Документ6 страниц
    LP-NR 4
    Dutcovici Radu
    100% (1)
  • ASD16 Arbori
    ASD16 Arbori
    Документ6 страниц
    ASD16 Arbori
    Husker Dou
    Оценок пока нет
  • Laborator 3 TPI
    Laborator 3 TPI
    Документ14 страниц
    Laborator 3 TPI
    ȚaranoviciVasile
    Оценок пока нет
  • Liste Circulare Simplu Inlantuite
    Liste Circulare Simplu Inlantuite
    Документ14 страниц
    Liste Circulare Simplu Inlantuite
    Vulpe Cristian
    Оценок пока нет
  • Sda Lab 1011
    Sda Lab 1011
    Документ30 страниц
    Sda Lab 1011
    Music NoCopyright
    Оценок пока нет
  • Arbori Binari de Cautare. Stergerea Unui Nod
    Arbori Binari de Cautare. Stergerea Unui Nod
    Документ8 страниц
    Arbori Binari de Cautare. Stergerea Unui Nod
    Rollin Revie
    Оценок пока нет
  • Model Documentate Algoritm Dijkstra
    Model Documentate Algoritm Dijkstra
    Документ10 страниц
    Model Documentate Algoritm Dijkstra
    Mihăiţă Şi-atât
    Оценок пока нет
  • Algoritmi Exponentiali
    Algoritmi Exponentiali
    Документ8 страниц
    Algoritmi Exponentiali
    Dinu Adrian
    0% (1)
  • CURS 1 Introducere Sisteme Dinamice
    CURS 1 Introducere Sisteme Dinamice
    Документ22 страницы
    CURS 1 Introducere Sisteme Dinamice
    Alessandro
    Оценок пока нет
  • Lab10 11 - CR 192PaduraruVadim
    Lab10 11 - CR 192PaduraruVadim
    Документ34 страницы
    Lab10 11 - CR 192PaduraruVadim
    Vadim Paduraru
    Оценок пока нет
  • Asdc 6
    Asdc 6
    Документ49 страниц
    Asdc 6
    Dan 421
    Оценок пока нет
  • Sisteme Dinamice
    Sisteme Dinamice
    Документ15 страниц
    Sisteme Dinamice
    Andrei Laur
    Оценок пока нет
  • Algoritmi Teorie
    Algoritmi Teorie
    Документ8 страниц
    Algoritmi Teorie
    Alexandra Lajtrik
    Оценок пока нет
  • Grafica Pe Calculator Lucrare Individual
    Grafica Pe Calculator Lucrare Individual
    Документ99 страниц
    Grafica Pe Calculator Lucrare Individual
    Zafer
    Оценок пока нет
  • BPC 5 Fișiere
    BPC 5 Fișiere
    Документ42 страницы
    BPC 5 Fișiere
    Vitalie Ambrosi
    Оценок пока нет
  • Tema7 Arbori Multicai
    Tema7 Arbori Multicai
    Документ2 страницы
    Tema7 Arbori Multicai
    Camelia Lemnaru
    Оценок пока нет
  • Structuri de Date
    Structuri de Date
    Документ203 страницы
    Structuri de Date
    Rodica Parvan
    100% (1)
  • Pointeri La Functii Probleme Rezolvate
    Pointeri La Functii Probleme Rezolvate
    Документ9 страниц
    Pointeri La Functii Probleme Rezolvate
    mmmaya
    Оценок пока нет
  • Arbori de Cautare Binari Echilibrati
    Arbori de Cautare Binari Echilibrati
    Документ12 страниц
    Arbori de Cautare Binari Echilibrati
    Ioniţă Cosmin
    Оценок пока нет
  • Grafuri Orientate
    Grafuri Orientate
    Документ19 страниц
    Grafuri Orientate
    Marahaha
    100% (1)
  • Examen Teoria - Grafurilor
    Examen Teoria - Grafurilor
    Документ2 страницы
    Examen Teoria - Grafurilor
    Ionel G
    100% (1)
  • Tronciu Laborator 9-SDA-Kulev
    Tronciu Laborator 9-SDA-Kulev
    Документ28 страниц
    Tronciu Laborator 9-SDA-Kulev
    Alex Alex
    Оценок пока нет
  • Elemente de Teoria Probabilitatii
    Elemente de Teoria Probabilitatii
    Документ9 страниц
    Elemente de Teoria Probabilitatii
    octav buzdugan
    Оценок пока нет
  • STeoretice - Baze de Date
    STeoretice - Baze de Date
    Документ3 страницы
    STeoretice - Baze de Date
    Carla Knoblau
    Оценок пока нет
  • Laboratorul 12. Operałii de Intrare/Ieşire. Fişiere
    Laboratorul 12. Operałii de Intrare/Ieşire. Fişiere
    Документ8 страниц
    Laboratorul 12. Operałii de Intrare/Ieşire. Fişiere
    Nick Holdan
    Оценок пока нет
  • Metoda Divide Et Impera
    Metoda Divide Et Impera
    Документ16 страниц
    Metoda Divide Et Impera
    danyaly
    Оценок пока нет
  • Probleme Recursivitate
    Probleme Recursivitate
    Документ2 страницы
    Probleme Recursivitate
    Bute Bogdan
    Оценок пока нет
  • Descrierea Algoritmilor
    Descrierea Algoritmilor
    Документ11 страниц
    Descrierea Algoritmilor
    Augustina Rotari
    Оценок пока нет
  • An1 Lab02 Sem2 16-17
    An1 Lab02 Sem2 16-17
    Документ4 страницы
    An1 Lab02 Sem2 16-17
    Newton Isaac
    Оценок пока нет
  • Prelucrarea Fisierelor
    Prelucrarea Fisierelor
    Документ19 страниц
    Prelucrarea Fisierelor
    Dragos George Spataru
    Оценок пока нет
  • Algoritmi Divide Et Impera
    Algoritmi Divide Et Impera
    Документ36 страниц
    Algoritmi Divide Et Impera
    Alexandra Burecu
    Оценок пока нет
  • Probleme Curs 4
    Probleme Curs 4
    Документ3 страницы
    Probleme Curs 4
    Sisu Octavian
    Оценок пока нет
  • Arbore AVL Prezentare
    Arbore AVL Prezentare
    Документ24 страницы
    Arbore AVL Prezentare
    ThomasMusa
    Оценок пока нет
  • Grafuri
    Grafuri
    Документ17 страниц
    Grafuri
    Moxx Monica
    Оценок пока нет
  • Arbori
    Arbori
    Документ13 страниц
    Arbori
    Anonymous Zt80rkh
    100% (1)
  • Lista Stiva Coada Alocare Statica PDF
    Lista Stiva Coada Alocare Statica PDF
    Документ29 страниц
    Lista Stiva Coada Alocare Statica PDF
    Stoicescu Dumitru
    Оценок пока нет
  • Şiruri de Caractere
    Şiruri de Caractere
    Документ25 страниц
    Şiruri de Caractere
    georgefrumuselu007
    100% (1)
  • Ziua Unu La Olimpiada
    Ziua Unu La Olimpiada
    Документ5 страниц
    Ziua Unu La Olimpiada
    pavlik
    Оценок пока нет
  • Heap Sort
    Heap Sort
    Документ22 страницы
    Heap Sort
    Andrei Botnari
    Оценок пока нет
  • Raspunsuri
    Raspunsuri
    Документ96 страниц
    Raspunsuri
    Madalina Ceclan
    Оценок пока нет
  • Curs 9 An
    Curs 9 An
    Документ79 страниц
    Curs 9 An
    Mădălina Hapciu
    Оценок пока нет