Дано распределение символов: A:0.5, B:0.25, C:0.125, D:0.125. Вычислите энтропию этого источника, постройте оптимальный префиксный код (например, код Хаффмана), найдите среднюю длину кодового слова и обсудите, какие практические ограничения (целые длины кодов, синхронизация, ошибки передачи) влияют на достижение энтропийного предела
Энтропия источника: H=−∑ipilog2pi=−(0.5log20.5+0.25log20.25+0.125log20.125+0.125log20.125)H=-\sum_i p_i\log_2 p_i = -\big(0.5\log_2 0.5 + 0.25\log_2 0.25 + 0.125\log_2 0.125 + 0.125\log_2 0.125\big)H=−∑ipilog2pi=−(0.5log20.5+0.25log20.25+0.125log20.125+0.125log20.125). Вычисления по членам: −0.5log20.5=0.5-0.5\log_2 0.5 = 0.5−0.5log20.5=0.5, −0.25log20.25=0.5-0.25\log_2 0.25 = 0.5−0.25log20.25=0.5, −0.125log20.125=0.375-0.125\log_2 0.125 = 0.375−0.125log20.125=0.375 (для C и D по одному). Итого H=0.5+0.5+0.375+0.375=1.75H = 0.5+0.5+0.375+0.375 = 1.75H=0.5+0.5+0.375+0.375=1.75 бит/символ. Оптимальный префиксный (Хаффманов) код: Объединяем минимальные вероятности C и D в узел 0.125+0.125=0.250.125+0.125=0.250.125+0.125=0.25, затем этот узел с B (0.25) в узел 0.5, затем с A (0.5). Один возможный код: A: 0 B: 10 C: 110 D: 111 Средняя длина кода: L=∑ipili=0.5⋅1+0.25⋅2+0.125⋅3+0.125⋅3=1.75L=\sum_i p_i l_i = 0.5\cdot1 + 0.25\cdot2 + 0.125\cdot3 + 0.125\cdot3 = 1.75L=∑ipili=0.5⋅1+0.25⋅2+0.125⋅3+0.125⋅3=1.75 бит/символ. Здесь L=HL=HL=H потому что вероятности являются двоичными степенями: pi=2−lip_i=2^{-l_i}pi=2−li. Практические ограничения, влияющие на достижение энтропийного предела: - Целые длины кодов: для общих pip_ipi длины lil_ili должны быть целыми, поэтому для односимвольного Хаффмана справедливо H≤L<H+1H \le L < H+1H≤L<H+1. С блоковым кодированием длина на символ может быть ближе к HHH: для блоков длины nnn обычно H≤Ln<H+1/nH \le L_n < H + 1/nH≤Ln<H+1/n. - Префиксность и синхронизация: префиксный код обеспечивает мгновенное декодирование, но при ошибке бита синхронизация может быть нарушена (пока не встретится следующий кодовый граничный узор). Требуются маркеры/фреймы или специальные самосинхронизирующие коды для устойчивости. - Ошибки передачи: пробой одного бита может исказить несколько последующих символов (ошибка распространяется). Исправление ошибок (канальное кодирование) добавляет избыточность и повышает среднюю длину/битовую нагрузку выше энтропийного предела источника. - Сложность и задержки: методы, приближающие HHH (аритметическое кодирование, блочное кодирование большого nnn) требуют большего вычисления/памяти и вводят задержки; арифметическое кодирование чувствительно к точности вычислений и ошибкам. - Практические ограничения протоколов: выравнивание по байтам, требования к минимальной задержке, ограничения на поток битов и др. также увеличивают реальную среднюю длину на символ. Вывод: для данного распределения Хаффман даёт оптимальный префиксный код с L=H=1.75L=H=1.75L=H=1.75 бита/символ; в общем же конечные длины, синхронизация, ошибки и требование к надёжности делают достижение теоретического предела в реальной системе компромиссом.
H=−∑ipilog2pi=−(0.5log20.5+0.25log20.25+0.125log20.125+0.125log20.125)H=-\sum_i p_i\log_2 p_i = -\big(0.5\log_2 0.5 + 0.25\log_2 0.25 + 0.125\log_2 0.125 + 0.125\log_2 0.125\big)H=−∑i pi log2 pi =−(0.5log2 0.5+0.25log2 0.25+0.125log2 0.125+0.125log2 0.125).
Вычисления по членам:
−0.5log20.5=0.5-0.5\log_2 0.5 = 0.5−0.5log2 0.5=0.5, −0.25log20.25=0.5-0.25\log_2 0.25 = 0.5−0.25log2 0.25=0.5, −0.125log20.125=0.375-0.125\log_2 0.125 = 0.375−0.125log2 0.125=0.375 (для C и D по одному).
Итого
H=0.5+0.5+0.375+0.375=1.75H = 0.5+0.5+0.375+0.375 = 1.75H=0.5+0.5+0.375+0.375=1.75 бит/символ.
Оптимальный префиксный (Хаффманов) код:
Объединяем минимальные вероятности C и D в узел 0.125+0.125=0.250.125+0.125=0.250.125+0.125=0.25, затем этот узел с B (0.25) в узел 0.5, затем с A (0.5). Один возможный код:
A: 0
B: 10
C: 110
D: 111
Средняя длина кода:
L=∑ipili=0.5⋅1+0.25⋅2+0.125⋅3+0.125⋅3=1.75L=\sum_i p_i l_i = 0.5\cdot1 + 0.25\cdot2 + 0.125\cdot3 + 0.125\cdot3 = 1.75L=∑i pi li =0.5⋅1+0.25⋅2+0.125⋅3+0.125⋅3=1.75 бит/символ.
Здесь L=HL=HL=H потому что вероятности являются двоичными степенями: pi=2−lip_i=2^{-l_i}pi =2−li .
Практические ограничения, влияющие на достижение энтропийного предела:
- Целые длины кодов: для общих pip_ipi длины lil_ili должны быть целыми, поэтому для односимвольного Хаффмана справедливо H≤L<H+1H \le L < H+1H≤L<H+1. С блоковым кодированием длина на символ может быть ближе к HHH: для блоков длины nnn обычно H≤Ln<H+1/nH \le L_n < H + 1/nH≤Ln <H+1/n.
- Префиксность и синхронизация: префиксный код обеспечивает мгновенное декодирование, но при ошибке бита синхронизация может быть нарушена (пока не встретится следующий кодовый граничный узор). Требуются маркеры/фреймы или специальные самосинхронизирующие коды для устойчивости.
- Ошибки передачи: пробой одного бита может исказить несколько последующих символов (ошибка распространяется). Исправление ошибок (канальное кодирование) добавляет избыточность и повышает среднюю длину/битовую нагрузку выше энтропийного предела источника.
- Сложность и задержки: методы, приближающие HHH (аритметическое кодирование, блочное кодирование большого nnn) требуют большего вычисления/памяти и вводят задержки; арифметическое кодирование чувствительно к точности вычислений и ошибкам.
- Практические ограничения протоколов: выравнивание по байтам, требования к минимальной задержке, ограничения на поток битов и др. также увеличивают реальную среднюю длину на символ.
Вывод: для данного распределения Хаффман даёт оптимальный префиксный код с L=H=1.75L=H=1.75L=H=1.75 бита/символ; в общем же конечные длины, синхронизация, ошибки и требование к надёжности делают достижение теоретического предела в реальной системе компромиссом.