This shows you the differences between two versions of the page.
sd-ca:2017:laboratoare:lab-09 [2018/01/12 18:34] cristian.creteanu [Heap-uri] |
sd-ca:2017:laboratoare:lab-09 [2018/02/19 15:32] (current) cosmin_ioan.petrisor |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Lab 9 - ABC și Heap ====== | + | ====== Lab 9 - ABC si Heap ====== |
- | * Responsabil: [[mailto:cristiancreteanu06@gmail.com | Cristian Crețeanu]] | + | |
- | * Data ultimei modificări: 12.01.2018 | + | |
===== Obiective ===== | ===== Obiective ===== | ||
Line 173: | Line 172: | ||
</code> | </code> | ||
- | =====ABC vs Heap ===== | ||
- | Deși la prima vedere nu există mari diferențe între cele două structuri de date, ele sunt complet diferite. Se poate observa că ele diferă atât la nivelul implementării (bst:pointeri către fii vs heap:vector), cat și al complexităților operațiilor specifice. Totuși, deși ambele se pot folosi în rare cazuri pentru același scop (fără a fi la fel de eficiente), ele au întrebuințări diferite. | ||
- | |||
- | **ABC** | ||
- | * Se folosește pentru a implementa arbori echilibrați, precum AVL, Red-Black | ||
- | * Prezintă toate avantajele unui vector sortat, venind în plus cu inserare în timp constant. | ||
- | * Nu este mereu echilibrat. | ||
- | |||
- | **HEAP** | ||
- | * Heap-ul stă la baza implementării cozii de priorități și a algoritmului heapsort | ||
- | * Se poate folosi pentru găsirea eficientă a celui de-al k-lea cel mai mic/mare (minheap/maxheap) element. | ||
- | * Este mereu un arbore echilibrat (complet) | ||
- | |||
- | <note>Un arbore este **echilibrat** dacă fiecare subarbore este echilibrat și înălțimea orcăror doi subarbori diferă cu cel mult 1. Această regulă stă la baza implementării unui arbore AVL. Arborii roșu-negru impun alte reguli. | ||
- | |||
- | {{ :sd-ca:2017:laboratoare:balancedtree-example.png?300 |}}</note> | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
+ | <hidden> | ||
Acest articol se va realiza pornind de la **{{sd-ca:taskuri:lab9-tasks-2017.zip|scheletul de cod}}**. | Acest articol se va realiza pornind de la **{{sd-ca:taskuri:lab9-tasks-2017.zip|scheletul de cod}}**. | ||
Line 228: | Line 212: | ||
- | ==== Heap (Bonus) ==== | + | ==== Heap-uri ==== |
- | 1. [**1p**] **heap.h** Definiţi o structură de vector pe care să poată fi folosite operaţiile de baza ale unui heap, şi funcţii de construcţie şi eliberare a structurii: | + | 1. [**1p**] **heap.h** Definiţi o structură de vector pe care să poată fi folosite operaţiile de heap-uri, şi funcţii de construcţie şi eliberare a structurii: |
*[**0.5p**] Constructor pentru inițializarea unui heap. ''capVect'' reprezintă numărul maxim de elemente din vector. Codul va trebui să aloce memorie separată şi apoi să lucreze cu acea memorie. | *[**0.5p**] Constructor pentru inițializarea unui heap. ''capVect'' reprezintă numărul maxim de elemente din vector. Codul va trebui să aloce memorie separată şi apoi să lucreze cu acea memorie. | ||
Line 317: | Line 301: | ||
} | } | ||
</code> | </code> | ||
+ | </hidden> | ||
===== Resurse ===== | ===== Resurse ===== |