This shows you the differences between two versions of the page.
|
sd-ca:laboratoare:laborator-11 [2015/05/17 23:39] cosmin_ioan.petrisor [Proprietăţi ale structurii de heap binar. Operaţii elementare.] |
sd-ca:laboratoare:laborator-11 [2015/05/21 05:57] (current) mihai.neacsu2901 [Aplicaţii] |
||
|---|---|---|---|
| Line 52: | Line 52: | ||
| *''pushDown'', care presupune că heap-ul a fost modificat într-un singur nod şi noua valoare este mai mare decât cel puţin unul dintre descendenţi, şi astfel ea trebuie "cernută" către nivelurile de jos, până când heap-ul devine din nou valid. | *''pushDown'', care presupune că heap-ul a fost modificat într-un singur nod şi noua valoare este mai mare decât cel puţin unul dintre descendenţi, şi astfel ea trebuie "cernută" către nivelurile de jos, până când heap-ul devine din nou valid. | ||
| - | *''pushUp'', care presupune că valoarea modificată (sau adăugată la sfârşitul vectorului, în acest caz) este mai mică decât părintele şi astfel se propagă acea valoare spre rădăcina arborelui, până cand heap-ul devine valid. | + | *''pushUp'', care presupune că valoarea modificată (sau adăugată la sfârşitul vectorului, în acest caz) este mai mică decât părintele, şi astfel se propagă acea valoare spre rădăcina arborelui, până cand heap-ul devine valid. |
| ===== Operaţii uzuale asupra heap-ului ===== | ===== Operaţii uzuale asupra heap-ului ===== | ||
| Având implementate cele două operaţii de bază, putem defini operaţiile uzuale de manipulare a heap-urilor: | Având implementate cele două operaţii de bază, putem defini operaţiile uzuale de manipulare a heap-urilor: | ||
| Line 143: | Line 143: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| + | 2. [3p] Implementaţi operaţiile elementare de lucru cu heap-uri, prezentate în secţiunile anterioare: | ||
| + | |||
| + | *[1p] Implementati functiile de calcul ai parintelui si ai descendentilor. | ||
| + | |||
| + | <code c++> | ||
| + | template <typename T> | ||
| + | int Heap<T>::parent(int poz) | ||
| + | { | ||
| + | // TODO 2.1 | ||
| + | } | ||
| + | |||
| + | template <typename T> | ||
| + | int Heap<T>::leftSubtree(int poz) | ||
| + | { | ||
| + | // TODO 2.1 | ||
| + | } | ||
| + | |||
| + | template <typename T> | ||
| + | int Heap<T>::rightSubtree(int poz) | ||
| + | { | ||
| + | // TODO 2.1 | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Cele trei funcţii de mai sus vor întoarce -1 în cazul în care părintele, respectiv descendenţii nu există. | ||
| + | |||
| + | * [2p] Implementati pushUp si pushDown. | ||
| + | <code c++> | ||
| + | template <typename T> | ||
| + | void Heap<T>::pushUp(int poz) | ||
| + | { | ||
| + | // TODO 2.2 | ||
| + | | ||
| + | } | ||
| + | |||
| + | template <typename T> | ||
| + | void Heap<T>::pushDown(int poz) | ||
| + | { | ||
| + | // TODO 2.2 | ||
| + | | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | |||
| + | 3. [1p] Implementaţi operaţiile uzuale de lucru cu heap-uri: | ||
| + | |||
| + | <code c++> | ||
| + | template <typename T> | ||
| + | void Heap<T>::insert(T x) | ||
| + | { | ||
| + | // TODO 3 | ||
| + | } | ||
| + | |||
| + | template <typename T> | ||
| + | T Heap<T>::peek() | ||
| + | { | ||
| + | // TODO 3 | ||
| + | } | ||
| + | |||
| + | template <typename T> | ||
| + | T Heap<T>::extractMin() | ||
| + | { | ||
| + | // TODO 3 | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | 4. [2p] **p4.cpp** Implementaţi algoritmul de sortare folosind heap-uri, alegând una dintre cele două metode prezentate mai sus. Testați implementarea voastră a sortării rulând scriptul de testare ''test.sh''. | ||
| + | |||
| + | **Obs.:** | ||
| + | * Se va citi întâi numărul **n** de elemente, iar apoi **n** numere care trebuie sortate. | ||
| + | * Citirea se face de la **stdin**. Nu modificați afișarea! Afișarea are formatul folosit pentru script-ul de testing. | ||
| + | **BONUS!** [1p] Implementaţi şi celelalta metoda de sortare prin heap-uri, în afară de cea aleasă iniţial. Pentru testare se va modifica doar funcția ''heapSort'' și se va executa tot scriptul ''test.sh''. | ||
| + | |||
| <hidden> | <hidden> | ||
| 2. [3p] Implementaţi operaţiile elementare de lucru cu heap-uri, prezentate în secţiunile anterioare: | 2. [3p] Implementaţi operaţiile elementare de lucru cu heap-uri, prezentate în secţiunile anterioare: | ||