Дан дискретный источник с символами s1..s4 и вероятностями p = {0.6, 0.25, 0.1, 0.05}; вычислите энтропию источника, нижнюю границу средней длины кода по неравенству Шеннона, предложите конкретную префиксную кодировку (например, код Хаффмана) и сравните её эффективность со сжатием арифметическим с учётом накладных расходов и адаптивности
Энтропия источника: H=−∑i=14pilog2pi=−(0.6log20.6+0.25log20.25+0.1log20.1+0.05log20.05)≈1.49046856 бит/симв.
H=-\sum_{i=1}^4 p_i\log_2 p_i =-(0.6\log_2 0.6+0.25\log_2 0.25+0.1\log_2 0.1+0.05\log_2 0.05) \approx 1.49046856\ \text{бит/симв.} H=−i=1∑4pilog2pi=−(0.6log20.6+0.25log20.25+0.1log20.1+0.05log20.05)≈1.49046856бит/симв. Нижняя граница средней длины префиксного кода (неравенство Шеннона): Lˉ≥H,а для префиксных кодов обычно H≤Lˉ<H+1.
\bar L \ge H,\qquad\text{а для префиксных кодов обычно }H\le\bar L<H+1. Lˉ≥H,адляпрефиксныхкодовобычноH≤Lˉ<H+1.
Здесь нижняя граница равна H≈1.4905H\approx 1.4905H≈1.4905 бит/симв. Конкретная префиксная кодировка (Хаффман): Построение: объединяем 0.05+0.1=0.150.05+0.1=0.150.05+0.1=0.15, затем 0.15+0.25=0.40.15+0.25=0.40.15+0.25=0.4, затем 0.4+0.6=1.00.4+0.6=1.00.4+0.6=1.0. Например, кодировка s1:0,s2:10,s3:110,s4:111.
s_1:0,\quad s_2:10,\quad s_3:110,\quad s_4:111. s1:0,s2:10,s3:110,s4:111.
Средняя длина этого кода: Lˉ=0.6⋅1+0.25⋅2+0.1⋅3+0.05⋅3=1.55 бит/симв.
\bar L=0.6\cdot1+0.25\cdot2+0.1\cdot3+0.05\cdot3=1.55\ \text{бит/симв.} Lˉ=0.6⋅1+0.25⋅2+0.1⋅3+0.05⋅3=1.55бит/симв.
Избыточность относительно энтропии: R=Lˉ−H≈1.55−1.49046856≈0.05953 бит/симв.
R=\bar L-H\approx 1.55-1.49046856\approx 0.05953\ \text{бит/симв.} R=Lˉ−H≈1.55−1.49046856≈0.05953бит/симв. Сравнение с арифметическим кодированием: - Теоретически арифметическое (или range) кодирование может приблизиться к энтропии сколь угодно близко при больших блоках: средняя скорость ≈H\approx H≈H бит/симв. — т.е. выигрыш по сравнению с данным Хаффманом около Δ≈LˉHuff−H≈0.0595 бит/симв..
\Delta\approx \bar L_{\text{Huff}}-H\approx 0.0595\ \text{бит/симв.}. Δ≈LˉHuff−H≈0.0595бит/симв..
- На практике есть накладные расходы: заголовок/модель (несколько десятков бит), конечная фиксация интервала, конечная-точность арифметики. Для статической известной модели эти накладные расходы распределяются по всей последовательности; если заголовок, скажем, ∼32\sim 32∼32 бит, то точка безубыточности примерно N≈32/0.0595≈538 символов.
N\approx 32/0.0595\approx 538\ \text{символов.} N≈32/0.0595≈538символов.
- Для коротких сообщений Хаффман часто выгоднее (меньше накладных расходов, простая реализация). Для длинных последовательностей арифметическое даёт лучшее сжатие (приближение к HHH). - Адаптивность: адаптивный арифметический кодер автоматически подстраивается под неизвестные распределения и обычно даёт лучшее сжатие при меняющихся частотах, чем статический Хаффман; адаптивный Хаффман проще, но обычно менее эффективен, чем адаптивный арифметический. - Сложность: арифметическое/range сложнее и медленнее в реализации, требует аккуратной реализации и точности; Хаффман — прост и быстр. Вывод кратко: энтропия H≈1.4905H\approx 1.4905H≈1.4905 бит/симв.; оптимальный префиксный (Хаффман) код даёт Lˉ=1.55\bar L=1.55Lˉ=1.55 бит/симв. (избыточность ≈0.0595\approx 0.0595≈0.0595 бит/симв.). Арифметическое кодирование может сократить этот избыточный кусок и приблизиться к HHH, но требует большего кода/накладных расходов и более сложной реализации; при коротких сообщениях Хаффман чаще предпочтителен, при длинных — арифметическое эффективнее.
H=−∑i=14pilog2pi=−(0.6log20.6+0.25log20.25+0.1log20.1+0.05log20.05)≈1.49046856 бит/симв. H=-\sum_{i=1}^4 p_i\log_2 p_i
=-(0.6\log_2 0.6+0.25\log_2 0.25+0.1\log_2 0.1+0.05\log_2 0.05)
\approx 1.49046856\ \text{бит/симв.}
H=−i=1∑4 pi log2 pi =−(0.6log2 0.6+0.25log2 0.25+0.1log2 0.1+0.05log2 0.05)≈1.49046856 бит/симв.
Нижняя граница средней длины префиксного кода (неравенство Шеннона):
Lˉ≥H,а для префиксных кодов обычно H≤Lˉ<H+1. \bar L \ge H,\qquad\text{а для префиксных кодов обычно }H\le\bar L<H+1.
Lˉ≥H,а для префиксных кодов обычно H≤Lˉ<H+1. Здесь нижняя граница равна H≈1.4905H\approx 1.4905H≈1.4905 бит/симв.
Конкретная префиксная кодировка (Хаффман):
Построение: объединяем 0.05+0.1=0.150.05+0.1=0.150.05+0.1=0.15, затем 0.15+0.25=0.40.15+0.25=0.40.15+0.25=0.4, затем 0.4+0.6=1.00.4+0.6=1.00.4+0.6=1.0. Например, кодировка
s1:0,s2:10,s3:110,s4:111. s_1:0,\quad s_2:10,\quad s_3:110,\quad s_4:111.
s1 :0,s2 :10,s3 :110,s4 :111. Средняя длина этого кода:
Lˉ=0.6⋅1+0.25⋅2+0.1⋅3+0.05⋅3=1.55 бит/симв. \bar L=0.6\cdot1+0.25\cdot2+0.1\cdot3+0.05\cdot3=1.55\ \text{бит/симв.}
Lˉ=0.6⋅1+0.25⋅2+0.1⋅3+0.05⋅3=1.55 бит/симв. Избыточность относительно энтропии:
R=Lˉ−H≈1.55−1.49046856≈0.05953 бит/симв. R=\bar L-H\approx 1.55-1.49046856\approx 0.05953\ \text{бит/симв.}
R=Lˉ−H≈1.55−1.49046856≈0.05953 бит/симв.
Сравнение с арифметическим кодированием:
- Теоретически арифметическое (или range) кодирование может приблизиться к энтропии сколь угодно близко при больших блоках: средняя скорость ≈H\approx H≈H бит/симв. — т.е. выигрыш по сравнению с данным Хаффманом около
Δ≈LˉHuff−H≈0.0595 бит/симв.. \Delta\approx \bar L_{\text{Huff}}-H\approx 0.0595\ \text{бит/симв.}.
Δ≈LˉHuff −H≈0.0595 бит/симв.. - На практике есть накладные расходы: заголовок/модель (несколько десятков бит), конечная фиксация интервала, конечная-точность арифметики. Для статической известной модели эти накладные расходы распределяются по всей последовательности; если заголовок, скажем, ∼32\sim 32∼32 бит, то точка безубыточности примерно
N≈32/0.0595≈538 символов. N\approx 32/0.0595\approx 538\ \text{символов.}
N≈32/0.0595≈538 символов. - Для коротких сообщений Хаффман часто выгоднее (меньше накладных расходов, простая реализация). Для длинных последовательностей арифметическое даёт лучшее сжатие (приближение к HHH).
- Адаптивность: адаптивный арифметический кодер автоматически подстраивается под неизвестные распределения и обычно даёт лучшее сжатие при меняющихся частотах, чем статический Хаффман; адаптивный Хаффман проще, но обычно менее эффективен, чем адаптивный арифметический.
- Сложность: арифметическое/range сложнее и медленнее в реализации, требует аккуратной реализации и точности; Хаффман — прост и быстр.
Вывод кратко: энтропия H≈1.4905H\approx 1.4905H≈1.4905 бит/симв.; оптимальный префиксный (Хаффман) код даёт Lˉ=1.55\bar L=1.55Lˉ=1.55 бит/симв. (избыточность ≈0.0595\approx 0.0595≈0.0595 бит/симв.). Арифметическое кодирование может сократить этот избыточный кусок и приблизиться к HHH, но требует большего кода/накладных расходов и более сложной реализации; при коротких сообщениях Хаффман чаще предпочтителен, при длинных — арифметическое эффективнее.