Рассчитайте и интерпретируйте энтропию Шеннона для дискретного источника с заданным распределением вероятностей p = {0.5, 0.25, 0.25}, обсудите связь энтропии с сжатием информации и приведите пример кода (или псевдокода) простого алгоритма кодирования для этого источника

31 Окт в 09:57
6 +1
0
Ответы
1
Рассчёт энтропии:
Пусть p={0.5,0.25,0.25}p=\{0.5,0.25,0.25\}p={0.5,0.25,0.25}. Энтропия Шеннона определяется как
H(X)=−∑ipilog⁡2pi. H(X)=-\sum_i p_i\log_2 p_i.
H(X)=i pi log2 pi .
Подставляя значения,
H(X)=−(0.5log⁡20.5+0.25log⁡20.25+0.25log⁡20.25). H(X)=-\big(0.5\log_2 0.5 + 0.25\log_2 0.25 + 0.25\log_2 0.25\big).
H(X)=(0.5log2 0.5+0.25log2 0.25+0.25log2 0.25).
Так как log⁡20.5=−1\log_2 0.5=-1log2 0.5=1 и log⁡20.25=−2\log_2 0.25=-2log2 0.25=2,
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,
и
H(X)=−(−0.5−0.5−0.5)=1.5 бит/символ. H(X)=-(-0.5-0.5-0.5)=1.5\ \text{бит/символ}.
H(X)=(0.50.50.5)=1.5 бит/символ.

Интерпретация и связь с сжатием:
- Энтропия H(X)=1.5H(X)=1.5H(X)=1.5 бита — это средняя минимальная неопределённость (количество информации) о символе источника в битах.
- Для безошибочного (без потерь) кодирования средняя длина кода на символ LLL удовлетворяет оценке для префиксных кодов
H(X)≤L<H(X)+1. H(X)\le L < H(X)+1.
H(X)L<H(X)+1.
- Если вероятности являются степенями 1/21/21/2 (диадические), то можно достичь L=H(X)L=H(X)L=H(X) с целочисленными длинами кода. В нашем случае распределение диадическое, поэтому оптимальный префиксный код даёт именно среднюю длину 1.51.51.5 бита/символ.
Пример оптимального кода (например, Huffman):
- Символы: A с p=0.5p=0.5p=0.5, B с p=0.25p=0.25p=0.25, C с p=0.25p=0.25p=0.25.
- Один корректный оптимальный префиксный код: A → 0, B → 10, C → 11.
Средняя длина
L=0.5⋅1+0.25⋅2+0.25⋅2=1.5 бит/символ=H(X). L=0.5\cdot 1 + 0.25\cdot 2 + 0.25\cdot 2 = 1.5\ \text{бит/символ}=H(X).
L=0.51+0.252+0.252=1.5 бит/символ=H(X).

Простой псевдокод (Python-подобный) для кодирования/декодирования:
Кодировщик:
```
code = {'A': '0', 'B': '10', 'C': '11'}
function encode(symbols):
bits = ""
for s in symbols:
bits += code[s]
return bits
```
Декодировщик (жадное префиксное чтение):
```
inverse = {'0':'A', '10':'B', '11':'C'}
function decode(bits):
out = []
i = 0
while i < len(bits):
# пробуем 1 бит, затем 2 бита (так как максимальная длина = 2)
if bits[i:i+1] in inverse:
out.append(inverse[bits[i:i+1]])
i += 1
else:
out.append(inverse[bits[i:i+2]])
i += 2
return out
```
Заключение: энтропия даёт фундаментальную нижнюю границу средней длины кода; для данного распределения можно достичь этой границы простым префиксным кодом.
31 Окт в 10:39
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир