logo
shpori (1) / shpori (1)

36. Алгоритмы сжатия информации

Имеется файл с данными. Данные представляют собой последовательность символов .Нужно закодировать символы таким образом, чтобы

1) размер файла уменьшился;

2) исходный файл можно было бы восстановить из сжатого

Каждый символ кодируется последовательностью битов (например, ASCII-кодом, в котором каждый символ кодируется 8 битами)

Идея: кодировать символы таким образом, чтобы выполнялось следующее:

чем чаще встречается символ, тем короче его код .

Алгоритм Хаффмана

Пусть имеется файл с размером 100 байт,

состоящий из символов A,B,C,D,E,F.

1)Посчитаем число вхождений каждого символа

A

B

C

D

E

F

10

20

30

5

25

10

2) Отсортируем символы по частоте их вхождений

C

E

B

F

A

D

30

25

20

10

10

5

C

E

B

F

A

D

00

10

11

010

0110

0111


Нужно еще хранить и дерево кодирования!

В дереве 11 вершин, каждая должна содержать указатели на своего правого и левого сына. Каждый указатель – например 4 байта.

Итого получаем 4*11 = 44 байта

100 байт

74 байт


было

Стало

C

30*8=240

30*2=60

E

25*8=240

25*2=50

B

20*8=160

20*2=40

F

10*8=80

10*3=30

A

10*8=80

10*4=40

D

5*8=40

5*4=20

800бит=100байт

240бит=30байт