1

В алгоритме Хаффмана мы формируем дерево и заменяем каждый символ значением дерева 1 и 0, почему бы нам просто не использовать двоичные цифры, такие как a=0,b=1,c=10,d=01,e=11 и так далее чем заменить их символами и при распаковке применить обратное и заменить двоичные цифры на алфавиты.Почему мы не используем простые двоичные значения для сжатия данных

Как это:

character Huffman-code binary-code 
a   00   0 
b   01   1 
c   101   01 

и так далее ...

+7

Пункт Хаффмана заключается в том, что результат однозначен. Используя ваш пример, если код, который вы хотите распаковать, - «00101», то он однозначно «ac» в Хаффмане. Используя ваш алгоритм, это могут быть «aabab», «acc», «acab» ... – JJJ

+0

Код Хаффмана для «abcd» - «000110111110», есть вероятность двусмысленности, не так ли? –

+2

Нет, и, кстати, это не код Хаффмана, поскольку он не является оптимальным (единственный код, начинающийся с 1, равен 101, что может быть просто 1). Это по-прежнему префиксный код, поэтому он однозначно декодируется. – harold

ответ

2

Важным условием для кодов Хаффмана является то, что нет двух префиксом друг друга. Если вы просто перенумеруете их (как я думаю, это то, что вы предлагаете), вы теряете это свойство.

Чтобы понять, почему это происходит, посмотрите на «01» в качестве выхода. В версии, отличной от Хаффмана, она может быть либо «0», либо «1» (таким образом, «ab»), или «01» (таким образом, «c»), вы не можете сказать, что.