/* Vertex.symbol - kodowany symbol Vertex.freq - częstość kodowanego symbolu Vertex.left - dowiązanie do lewego następnika obiektu typu Vertex Vertex.right - dowiązanie do prawego następnika obiektu typu Vertex */ | ||
1 |
Vertex Huffman(Vertex Input[]) { | |
// Input - tablica wejściowa symboli wraz częstościami ich występowania | ||
2 |
PriorityQueue PQ; // kolejka priorytetowa typu MIN dla obiektów typu |
Vertex |
3 |
// początkowo pusta Vertex Tmpl, Tmp2; | |
4 |
int i:=0; | |
5 | ||
6 |
PQ:=PQConstruct (Input) ; // budowa kolejki priorytetowej z obiektów |
typu Vertex |
7 |
// względem wartości pola freq | |
8 |
while (i<size(Input)-1) do { | |
9 |
Tmpl :=MIN (PQ) ; | |
10 |
DELMIN(PQ) ; | |
11 |
Tmp2:=MIN(PQ); | |
12 |
DELMIN(PQ) ; | |
13 | ||
14 |
Tmpl :=connect (Tmpl, Tmp2) ; // łączymy symbole | |
15 | ||
16 |
INSERT (PQ, Tmpl) ; // połączone symbole umieszczamy w kolejce priorytetowej | |
17 |
} | |
18 | ||
19 |
return MIN(PQ); | |
20 |
} |