Documente Academic
Documente Profesional
Documente Cultură
Laboratorul 8: Heap
1 Introducere
1.1 Heap
• pointerii catre nodurile fii sunt inlocuite cu indecsi, calculati folosind o formula de
calcul.
1
Ioana Neamt, u Structuri de Date
idx − 1
parent(idx) = (1)
2
lef t − son − index(idx) = 2 ∗ idx + 1 (2)
Un min-heap binar este un arbore binar in care fiecare nod are propietatea ca
valoarea sa este mai sau egala decat a fiilor sai.
• daca valoarea nodului este mai mare decat cea a parintelui sau, se interschimba valoarea
nodului cu a parintelui, pana cand nodul ajunge in pozitia corecta (heapify up)
• pentru a sterge acest element, se interschimba valoarea acestui nod cu valoarea ultim-
ului nod din lista si se elimina ultimul nod din lista
• daca valoarea noului nod radacina (x) este mai mare decat valoarea fiilor sai, se inter-
schimba cu valoarea cea mai mica dintre cele a fiilor. Procesul se continua pana cand
nodul x ajunge la pozitia corecta.
2
Ioana Neamt, u Structuri de Date
avea coduri formate din mai putine simboluri decat cele cu o frecventa mai redusa.
1.2.1 Codificare
Algorithm 1 Huffman
0: procedure create-huffman-tree(data, freq)
In exemplul anterior, codul pentru ’e’ este 000 iar codul pentru ’a; este 010.
1.2.2 Decodificare
3
Ioana Neamt, u Structuri de Date
2 Exercitii
// i n i t i a l i z a r e a heap−u l u i
4
Ioana Neamt, u Structuri de Date
MinHeap∗ c r e a t e m i n h e a p ( int i n i t i a l c a p a c i t y ) ;
// f u n c t i e u t i l i z a t a l a i n s e r a r e a i n MinHeap
void h e a p i f y u p ( MinHeap ∗heap , int pos ) ;
// f u n c t i e u t i l i z a t a l a s t e r g e r e a d i n MinHeap
void h e a p i fy d o w n ( MinHeap ∗heap , int pos ) ;
// f u n c t i e p e n t r u s t e r g e r e a n o d u l u i minim d i n heap
heap node ∗ e x t r a c t m i n ( MinHeap ∗ heap ) ;
// adaugarea unui nod i n heap
void i n s e r t ( MinHeap ∗heap , char value , int f r e q ) ;
// c r e a r e a a r b o r e l u i Huffman
heap node ∗ b u i l d h u f f m a n t r e e ( char data [ ] , int f r e q u e n c e s [ ] ) ;
// a f i s a r e a c o d u l u i p e n t r u un c a r a c t e r d a t a
void p r i n t c o d e ( MinHeap∗ h u f f m a n t r e e , char l e t t e r ) ;
// d e c o d i f i c a r e a unui cod
char decode ( MinHeap∗ h u f f m a n t r e e , char code [ ] ) ;
3 Link-uri utile
4 Observatii
• Trimiteti laboratorul pe Moodle, in slotul grupei voastre pana astazi, ora 23:00.
• Laboratorul va fi trimis sub forma unei arhive zip continand toate fisierele sursă.