Vissza
Labor 7, haladóknak
Huffman kód
Tetszőleges szövegállomány tartalmát
tömörítsük, Huffman kódot használva.
Példa:
Ha egy
szövegállomány karakter előfordulási
statisztikája a következő:
a
|
b
|
c
|
d
|
e
|
f
|
45
|
13
|
12
|
16
|
9
|
5
|
akkor a karaktereknek megfelelő kódok a következőek
lesznek:
a
|
b
|
c
|
d
|
e
|
f
|
0
|
101
|
100
|
111
|
1101
|
1100
|
Az
elof,
az
apa
és
fiu
tömbök lépésenkénti
előállítása a következő:
0 1
2 3 4 5
elof
[45 13 12 16 9
5]
5 + 9 = 14
45 13 12 16 9 5
apa
[_ _ _ _ 6
6]
fiu
[_ _ _ _ 1
0]
0 1
2 3 4
5 6
elof
[45 13 12
16 9 5 14]
12 + 13 = 25
45 13 12
16 9 5
14
apa
[_ 7 7 _ 6
6 _]
fiu
[_
1 0 _ 1 0
_]
0 1
2 3 4
5 6 7
elof[45
13 12 16
9 5 14
25]
16 + 14 = 30
45 13 12
16 9
5
14 25
apa [_
7 7 8 6 6
8 _]
fiu [_
1 0 1 1 0
0 _]
0 1
2 3 4
5 6 7 8
elof[45
13 12 16 9 5
14 25 30]
25 + 30 = 55
45 13 12
16 9
5 14 25 30
apa [_
7 7 8 6 6
8 9 9]
fiu [_
1 0 1 1 0
0 0 1]
0 1
2 3 4
5 6 7
8 9
elof[45 13 12
16 9 5 14 25 30 55] 45 + 55 = 100
45 13 12 16 9 5 14
25 30 55
apa
[10 7 7 8 6
6 8 9 9 10]
fiu [
0 1 0 1 1
0 0 0 1 1]
0 1
2 3 4
5 6 7
8 9 10
elof[45
13 12 16 9 5
14 25 30 55 100]
apa
[10 7 7 8
6 6 8 9 9
10 11]
fiu
[0 1 0 1
1 0 0 0 1
1 vege]
A
felépített tömbök alajpján a
kódok meghatározása a következő lesz:
pl. a c-nek
megfelelő kód: 100
0 1
2 3 4
5 6 7
8 9 10
elof[45
13 12
16 9 5
14 25 30 55 100]
apa
[10 7 7
8
6 6 8 9 9
10 11]
fiu
[0 1 0 1
1 0 0 0 1
1 vege]
0 1
2 3 4
5 6 7
8 9 10
elof[45
13 12
16 9 5
14 25 30 55 100]
apa
[10 7 7
8
6 6 8 9 9
10 11]
fiu
[0 1 0 1
1 0 0 0 1
1 vege]
0 1
2 3 4
5 6 7
8 9
10
elof[45
13 12
16 9 5
14 25 30 55 100]
apa
[10 7 7
8
6 6 8 9 9
10 11]
fiu
[0 1 0 1
1 0 0 0 1
1 vege]
pl. az e-nek
megfelelő kód: 1101
0 1
2 3 4
5 6 7
8 9 10
elof[45
13 12 16 9 5
14 25 30 55 100]
apa
[10 7 7 8
6 6
8 9 9
10 11]
fiu [0 1 0
1
1
0 0 0 1
1 vege]
0 1
2 3 4
5 6
7 8 9 10
elof[45
13 12
16 9 5
14 25 30 55 100]
apa
[10 7 7
8
6 6 8
9 9
10 11]
fiu [0 1
0 1
1 0 0
0 1
1 vege]
0 1
2 3 4
5 6 7 8
9 10
elof[45
13 12
16 9 5
14 25 30 55 100]
apa
[10 7 7
8
6 6 8 9 9
10 11]
fiu [0 1
0 1
1 0 0 0 1
1 vege]
0 1
2 3 4
5 6 7 8 9 10
elof[45 13 12 16 9 5
14 25 30 55 100]
apa [10 7 7 8
6 6 8 9 9
10
11]
fiu [0 1 0 1
1 0 0 0 1
1 vege]
A megfelelő bináris fa szemléletes
felépítése, pedig a következő
lesz (lásd Cormen, Leiserson and Rivest: Algoritmusok)::