Изменения

Перейти к: навигация, поиск
Нет описания правки
Данный алгоритм бывает полезен, когда нам нужно ограничить максимальную длину кодового слова, а при использовании алгоритма Хаффмана самому редко встречающемуся символу соответствует слишком длинное кодовое слово. Например, пусть дан алфавит из 5 символов <tex>A=\{A,B,C, C, D\}</tex>, а частоты символов являются степенями двойки: <tex>P=\{1,2,4, 8, 16\}</tex>. Тогда классический код Хоффмана будет выглядеть следующим образом:
<tex> {| class="wikitable"! Символ || Частота || Код|- align = "center"| A = || 1 || 1111 </tex>|- align = "center"<tex> | B = || 2 || 1110 </tex>|- align = "center"<tex> | C = || 4 || 110 </tex>|- align = "center"<tex> | D = || 8 || 10 </tex>|- align = "center"<tex> | E = || 16 || 0 </tex>|}
Самое длинное кодовое слово здесь имеет длину 4. Пусть мы хотим, чтобы слова в нашем коде были не длиннее трех бит. Тогда алгоритм, который будет описан ниже, генерирует такой код:
<tex> {| class="wikitable"! Символ || Частота || Код|- align = "center"| A = || 1 || 000 </tex>|- align = "center"<tex> | B = || 2 || 001 </tex>|- align = "center"<tex> | C = || 4 || 010 </tex>|- align = "center"<tex> | D = || 8 || 011 </tex>|- align = "center"<tex> | E = || 16 || 1 </tex>|}
Важно заметить следующий факт. В худшем случае все кодовые слова будут иметь длину L бит. Тогда мы можем закодировать <tex> 2^L </tex> символов. Таким образом, нельзя получить описанный выше код, если <tex> n > 2^L </tex>.
82
правки

Навигация