This shows you the differences between two versions of the page.
sd-ca:teme:teme-04 [2015/05/01 18:44] alexandru.farcasanu |
sd-ca:teme:teme-04 [2015/05/26 09:25] (current) alexandru.farcasanu [Tema 4] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Tema 4 ====== | ====== Tema 4 ====== | ||
- | Termen de predare: **Duminica, 24 Mai 2015, ora 23:55** | + | Termen de predare: **Luni, 25 Mai 2015, ora 23:55** |
- | Deadline hard: **Miercuri, 27 Mai, ora 23:55** | + | Deadline hard: **Joi, 28 Mai, ora 23:55** |
<note important> | <note important> | ||
**1 Mai** Adaugat precizare legata de reprezentantul unui nod. Actualizat arhiva de teste. | **1 Mai** Adaugat precizare legata de reprezentantul unui nod. Actualizat arhiva de teste. | ||
+ | |||
+ | **23 Mai** Modificare deadline: 25 Mai. | ||
+ | |||
+ | **24 Mai** Update script testare: limita de timp a fost marita la 100 de secunde. | ||
</note> | </note> | ||
===== Obiective ===== | ===== Obiective ===== | ||
Line 55: | Line 59: | ||
* dacă probabilitate(Nod1) = probabilitate(Nod2), şi înălţime(Nod1) = înălţime(Nod2), atunci ne uitam la reprezentantii nodurilor (vezi definitie mai jos). Daca reprezentant(Nod1) < reprezentant(Nod2) atunci Nod1 > Nod2 (ordinea se inversează), si viceversa. | * dacă probabilitate(Nod1) = probabilitate(Nod2), şi înălţime(Nod1) = înălţime(Nod2), atunci ne uitam la reprezentantii nodurilor (vezi definitie mai jos). Daca reprezentant(Nod1) < reprezentant(Nod2) atunci Nod1 > Nod2 (ordinea se inversează), si viceversa. | ||
- | Practic, aceste reguli specifică ordinea în care se vor scoate elementele din coadă: se preferă cele cu probabilitate mică, iar dacă sunt mai multe cu aceeaşi probabilitate, le vom lua pe cele de pe nivelurile cele mai mici, pentru a păstra echilibrat arborele Huffman. Daca si inaltimile sunt egale, luam in considerare reprezentantul. Astfel vom avem un mod unic de a scoate elementele din coada prioritara. | + | Practic, aceste reguli specifică ordinea în care se vor scoate elementele din coadă: se preferă cele cu probabilitate mică, iar dacă sunt mai multe cu aceeaşi probabilitate, le vom lua pe cele de pe nivelurile cele mai mici, pentru a păstra echilibrat arborele. Daca si inaltimile sunt egale, luam in considerare reprezentantul. Astfel vom avem un mod unic de a scoate elementele din coada prioritara. |
**Reprezentantul** unui nod se defineste in felul urmator: | **Reprezentantul** unui nod se defineste in felul urmator: | ||
Line 121: | Line 125: | ||
^Camp|**K**| **V** | **N** | **L**| | ^Camp|**K**| **V** | **N** | **L**| | ||
^Semnificatie|numarul de noduri din arbore| arborele serializat | dimensiunea fisierului original | fisier comprimat| | ^Semnificatie|numarul de noduri din arbore| arborele serializat | dimensiunea fisierului original | fisier comprimat| | ||
- | ^Tip/Dimensiune | 1 * uint16_t | K * HuffmanSerializedNode | 1 * uint32_t | sir de biti de lungime variabila | | + | ^Tip/Dimensiune | 1 * uint16_t | K * HuffmanSerializedNode | 1 * uint32_t | sir de biti ce reprezinta fisierul comprimat | |
===== Testare ===== | ===== Testare ===== | ||
Line 141: | Line 145: | ||
===== Alte precizari ===== | ===== Alte precizari ===== | ||
+ | * Atunci cand se construieste un nod nou, nodul cel mai prioritar din coada va deveni fiul **stang** al noului nod. | ||
+ | * Serializarea arborelui se va face printr-o parcurgere in **preordine**. | ||
* Se recomanda ca atat citirea cat si scrierea sa se realizeze cu functiile fread si fwrite. | * Se recomanda ca atat citirea cat si scrierea sa se realizeze cu functiile fread si fwrite. | ||
* Se recomanda folosirea tipurile de date uint8_t, uint16_t si uint32_t in cazul citirii si scrierii din fisiere. | * Se recomanda folosirea tipurile de date uint8_t, uint16_t si uint32_t in cazul citirii si scrierii din fisiere. |