Требование кодирования без префикса приводит к большим деревьям из-за того, что дерево должно быть завершено. Существует ли порог, в котором некодированное хранение данных фиксированной длины будет более эффективным, чем кодирование данных?
9
Ответы:
Энтропия
H(A)
для этой проблемы есть1.998
. Кодирование Хаффмана и кодирование с фиксированной длиной для этой задачи имеет среднюю длину кодового слова как2
. И к вашему сведению, кодирование, которое вы получили, используя кодировку Хаффмана, неверно. Huffman Encoding также создает коды, похожие на фиксированную длину для этой проблемы. Он использует жадный подход. Такa
что не получает код, а0
получает00
. Переработать дерево, которое вы генерируете, используя кодирование Хаффмана. Дерево, которое вы должны получить:источник
Introduction to Algorithms
поCLRS
. В главе о которойgreedy algorithms
вы можете получить формальное доказательствоHuffman algorithm
. Это длинное доказательство и требует терпения, чтобы прочитать.Кодирование Хаффмана приближает распределение населения со степенями двух вероятностей. Если истинное распределение состоит из степеней двух вероятностей (а входные символы полностью некоррелированы), кодирование Хаффмана является оптимальным. Если нет, вы можете сделать лучше с кодированием диапазона. Однако он оптимален среди всех кодировок, которые назначают конкретные наборы битов конкретным символам на входе.
источник
Да, это всегда оптимально.
Нет, нет порога, в котором он будет использовать меньше места для использования некодированных данных фиксированной длины.
Я нашел много доказательств в Интернете, но в статье в Википедии есть достаточное обсуждение кодирования Хаффмана .
Это также охватывает другие методы, которые обеспечивают более высокое сжатие (работа вне пространства, для которого оптимален код Хаффмана).
источник