Алгоритм на псевдокоде

Построение оптимального кода Хаффмана (n, P)

Обозначим

n – количество символов исходного алфавита;

P – массив вероятностей, упорядоченных по убыванию;

C – матрица элементарных кодов;

L – массив длин кодовых слов.

Huffman (n,P)

IF (n=2) C [1,1]:= 0, L [1]:= 1

    C [2,1]:=1, L [2]:=1

ELSE q:= P [n-1]+P [n]

    j:= Up (n,q)              (поиск и вставка суммы)

    Huffman (n-1,P)

    Down (n,j)             (достраивание кодов)

FI

 

Функция Up (n,q) находит в массиве P место, куда вставить число q, и вставляет его, сдвигая вниз остальные элементы.

 

DO (i=n-1, n-2,…,2)

    IF (P [i-1]≤q) P [i]:=P [i-1]

    ELSE j:=i

 OD

    FI

OD

P [j]:= q

 

Процедура Down (n,j) формирует кодовые слова.

 

S:= C [j,*] (запоминание j-той строки матрицы элементов кодов в массив S)

L:= L[j]

DO (i=j,…,n-2)

C [i,*]:= C[i+1,*] (сдвиг вверх строк матрицы С)

L [i]:=L [i+1]

OD

C [n-1,*]:= S, C [n,*]:= S (восстановление префикса кодовых слов из м-ва S)

C [n-1,L+1]:=0

C [n,L+1]:=1

L [n-1]:=L+1

L [n]:=L+1

 

Порядок выполнения работы

1. Изучить теоретический материал.

2. Реализовать процедуру построения оптимального кода Хаффмана.

3. Построить код Хаффмана для текста на английском языке, использовать файл не менее 1 Кб. Распечатать полученную кодовую таблицу в виде:

Символ Вероятность Кодовое слово Длина кодового слова       
       

4. Проверить выполнение неравенства Крафта-МакМиллана для полученного кода

5. Вычислить энтропию исходного файла и сравнить со средней длиной кодового слова.

Контрольные вопросы

1. Какой код называется разделимым? Префиксным?

2. В чем заключается теорема Крафта? Теорема МакМиллана?

3. Что такое энтропия дискретного вероятностного источника?

4. Какова основная характеристика неравномерного кода?

5. Что такое избыточность кода?

6. Почему код Хаффмана называется оптимальным?

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: