Для дискретного источника с алфавитом {A,B,C,D} и вероятностями {0.5,0.25,0.15,0.1} вычислите энтропию источника, постройте оптимальный код Хаффмана и оцените его среднюю длину; затем обсудите, в каких ситуациях арифметическое кодирование даст заметное преимущество и какие практические сложности связаны с его реализацией

5 Ноя в 15:03
4 +4
0
Ответы
1
1) Энтропия источника:
H=−∑ipilog⁡2pi=−(0.5log⁡20.5+0.25log⁡20.25+0.15log⁡20.15+0.1log⁡20.1)H=-\sum_{i} p_i\log_2 p_i = -\big(0.5\log_2 0.5 + 0.25\log_2 0.25 + 0.15\log_2 0.15 + 0.1\log_2 0.1\big)H=i pi log2 pi =(0.5log2 0.5+0.25log2 0.25+0.15log2 0.15+0.1log2 0.1)
Вычисления:
−0.5log⁡20.5=0.5,−0.25log⁡20.25=0.5,-0.5\log_2 0.5=0.5,\quad -0.25\log_2 0.25=0.5,0.5log2 0.5=0.5,0.25log2 0.25=0.5, −0.15log⁡20.15≈0.41055,−0.1log⁡20.1≈0.33219.-0.15\log_2 0.15\approx 0.41055,\quad -0.1\log_2 0.1\approx 0.33219.0.15log2 0.150.41055,0.1log2 0.10.33219.
Итого
H≈0.5+0.5+0.41055+0.33219≈1.7427H \approx 0.5+0.5+0.41055+0.33219 \approx 1.7427H0.5+0.5+0.41055+0.332191.7427 бит/символ.
2) Оптимальный код Хаффмана (построение кратко):
- Слияние наименьших: 0.1(D)+0.15(C)=0.250.1(D)+0.15(C)=0.250.1(D)+0.15(C)=0.25.
- Далее узлы: 0.25(B), 0.25(CD), 0.5(A)0.25(B),\,0.25(CD),\,0.5(A)0.25(B),0.25(CD),0.5(A). Сливаем два 0.25 в 0.5, затем с A.
Одно возможное присвоение кодов:
A: 000
B: 101010
C: 110110110
D: 111111111
3) Средняя длина кода:
Lˉ=∑pili=0.5⋅1+0.25⋅2+0.15⋅3+0.1⋅3=1.75\bar L=\sum p_i l_i = 0.5\cdot1 + 0.25\cdot2 + 0.15\cdot3 + 0.1\cdot3 = 1.75Lˉ=pi li =0.51+0.252+0.153+0.13=1.75 бит/символ.
Эффективность и избыток:
η=H/Lˉ≈1.7427/1.75≈0.996\eta = H/\bar L \approx 1.7427/1.75 \approx 0.996η=H/Lˉ1.7427/1.750.996.
Избыток Lˉ−H≈0.0073\bar L - H \approx 0.0073LˉH0.0073 б/симв, и выполняется общая оценка H≤Lˉ<H+1H \le \bar L < H+1HLˉ<H+1.
4) Когда арифметическое кодирование даёт заметное преимущество:
- При кодировании длинных последовательностей и/или при использовании сложных адаптивных моделей (контексты, условные вероятности): арифметическое кодирование может приблизиться к энтропии более плотно, т.к. даёт дробные биты на символ в среднем.
- Для больших алфавитов, сильно дробных или меняющихся вероятностей, а также когда требуется кодирование блоков символов как единого события (чтобы преодолеть ограничение целой длины кода у Хаффмана).
- Для очень малых вероятностей и редких событий (Хаффман даёт дискреteness-потери).
5) Практические сложности арифметического кодирования:
- Необходимы аккуратные методы с конечной точностью (ренормализация, работа с целыми интервалами); на практике используют range coding или адаптированные целочисленные реализации.
- Чувствительность к ошибкам: одна ошибка во внутреннем состоянии может разрушить декодирование последующей части потока.
- Требуется передача или согласование модели вероятностей (накладные расходы при коротких сообщениях).
- Сложнее и медленнее в реализации по сравнению с простым Хаффманом; исторически — патентные ограничения (сейчас в основном неактуально).
- Для очень коротких сообщений выигрыш по битам может быть пренебрежимо мал.
Кратко: для данного простого источника Хаффман почти оптимален (Lˉ=1.75\bar L=1.75Lˉ=1.75 против H≈1.7427H\approx1.7427H1.7427). Арифметическое кодирование приносит значимое улучшение главным образом для длинных сообщений, больших/адаптивных моделей или сложных контекстов, но требует аккуратной реализации (range coding, финитная арифметика, обработка ошибок, передача модели).
5 Ноя в 15:26
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир