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