Объясните понятие энтропии в теории информации и решите практическую задачу: имея распределение символов в тексте, как оценить среднюю длину оптимального префиксного кода и сравнить с реальной эффективностью существующей кодировки

18 Ноя в 10:22
2 +1
0
Ответы
1
Кратко о понятии:
- Энтропия источника дискретных символов задаёт среднее количество информации (в битах) на символ в идеальном кодировании и определяется как
H(X)=−∑ipilog⁡2pi, H(X)=-\sum_i p_i\log_2 p_i,
H(X)=i pi log2 pi ,
где pip_ipi — вероятность iii-го символа. Энтропия — нижняя теоретическая граница среднего числа бит на символ при кодировании без потерь.
Как оценить среднюю длину оптимального префиксного кода и сравнить с реальной кодировкой — пошагово:
1) Собрать частоты и вычислить вероятности:
pi=niN, p_i=\frac{n_i}{N},
pi =Nni ,
где nin_ini — число вхождений символа iii, NNN — всего символов.
2) Вычислить энтропию:
H=−∑ipilog⁡2pi(бит/символ). H=-\sum_i p_i\log_2 p_i\quad\text{(бит/символ)}.
H=i pi log2 pi (бит/символ).

3) Нижняя и достижимая оценка для префиксных кодов:
H≤L∗<H+1, H\le L^*<H+1,
HL<H+1,
где L∗L^*L — средняя длина оптимального префиксного (целочисленного) кода. Конструкции:
- Шенноновский код с длинами li=⌈−log⁡2pi⌉l_i=\lceil -\log_2 p_i\rceilli =log2 pi даёт среднюю длину ∑pili\sum p_i l_ipi li и укладывается в указанную границу.
- Алгоритм Хаффмана даёт оптимальный префиксный код (минимизирует среднюю длину среди целочисленных длин).
- Аритметическое кодирование или блочное кодирование позволяют приблизиться к HHH сколь угодно близко (снижение избыточности при увеличении блока).
4) Оценить существующую кодировку: если код присваивает символу длину li(exist)l_i^{(exist)}li(exist) , средняя длина
Lexist=∑ipi li(exist). L_{exist}=\sum_i p_i\, l_i^{(exist)}.
Lexist =i pi li(exist) .
Сравнения:
- избыточность (редундантность) в бит/символ:
R=Lexist−H. R=L_{exist}-H.
R=Lexist H.
- эффективность (доля энтропии в средней длине):
η=HLexist. \eta=\frac{H}{L_{exist}}.
η=Lexist H .
- ожидаемый объём сжатых данных для текста длины NNN: bits=N⋅L\text{bits}=N\cdot Lbits=NL.
Небольшой числовой пример:
- Частоты: A:50, B:30, C:20A:50,\;B:30,\;C:20A:50,B:30,C:20 (N=100N=100N=100), тогда
pA=0.5, pB=0.3, pC=0.2. p_A=0.5,\;p_B=0.3,\;p_C=0.2.
pA =0.5,pB =0.3,pC =0.2.
Энтропия:
H=−0.5log⁡20.5−0.3log⁡20.3−0.2log⁡20.2≈1.4855 бит/симв. H=-0.5\log_2 0.5-0.3\log_2 0.3-0.2\log_2 0.2\approx 1.4855\ \text{бит/симв.}
H=0.5log2 0.50.3log2 0.30.2log2 0.21.4855 бит/симв.
Шенноновские длины l=⌈−log⁡2p⌉l=\lceil -\log_2 p\rceill=log2 p дают lA=1, lB=2, lC=3l_A=1,\;l_B=2,\;l_C=3lA =1,lB =2,lC =3 и среднюю длину
LS=0.5⋅1+0.3⋅2+0.2⋅3=1.7. L_S=0.5\cdot1+0.3\cdot2+0.2\cdot3=1.7.
LS =0.51+0.32+0.23=1.7.
Хаффман даёт lA=1, lB=2, lC=2l_A=1,\;l_B=2,\;l_C=2lA =1,lB =2,lC =2 и
LHuff=0.5⋅1+0.3⋅2+0.2⋅2=1.5. L_{Huff}=0.5\cdot1+0.3\cdot2+0.2\cdot2=1.5.
LHuff =0.51+0.32+0.22=1.5.
Сравнение: избыточность RHuff=1.5−1.4855≈0.0145R_{Huff}=1.5-1.4855\approx 0.0145RHuff =1.51.48550.0145 бит/симв, эффективность η≈0.9903\eta\approx 0.9903η0.9903 (99.03%). Для ASCII (8 бит/симв) избыточность ≈6.51456.51456.5145 бит/симв.
Практическая инструкция для реального текста:
- подсчитать частоты (байты/символы/глифы),
- вычислить pip_ipi и HHH,
- посчитать Lexist=∑pili(exist)L_{exist}=\sum p_i l_i^{(exist)}Lexist =pi li(exist) если известны длины текущей кодировки,
- построить Хаффман (или арифметическое кодирование) и получить LoptL_{opt}Lopt ,
- сравнить по RRR и η\etaη, вычислить предполагаемую сэкономленную длину N⋅(Lexist−Lopt)N\cdot(L_{exist}-L_{opt})N(Lexist Lopt ) бит.
Это и есть полная методика оценки и сравнения.
18 Ноя в 11:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир