Теория информации: у вас есть альфавит с символами {A,B,C} с вероятностями {0.5,0.3,0.2}. Постройте оптимальный префиксный код (например, Хаффман), вычислите среднюю длину кода, энтропию источника и избыточность; обсудите, как меняются выводы при наличии источника с памятью (марковская зависимость) и какие практические последствия это имеет для сжатия данных
Оптимальный префиксный код (Хаффман): - Сортируем вероятности: 0.5, 0.3, 0.20.5,\,0.3,\,0.20.5,0.3,0.2. Сливаем две наименьшие 0.30.30.3 и 0.20.20.2 → 0.50.50.5. Получаем дерево, дающее, например, коды A↦0,B↦10,C↦11.
A \mapsto 0,\qquad B \mapsto 10,\qquad C \mapsto 11. A↦0,B↦10,C↦11. Средняя длина кода: L=∑xp(x)ℓ(x)=0.5⋅1+0.3⋅2+0.2⋅2=1.5 бит/символ.
L=\sum_{x} p(x) \ell(x)=0.5\cdot 1+0.3\cdot 2+0.2\cdot 2=1.5\ \text{бит/символ}. L=x∑p(x)ℓ(x)=0.5⋅1+0.3⋅2+0.2⋅2=1.5бит/символ. Энтропия источника: H=−∑xp(x)log2p(x)=−0.5log20.5−0.3log20.3−0.2log20.2≈1.4855 бит/символ.
H=-\sum_{x} p(x)\log_2 p(x) = -0.5\log_2 0.5-0.3\log_2 0.3-0.2\log_2 0.2\approx 1.4855\ \text{бит/символ}. H=−x∑p(x)log2p(x)=−0.5log20.5−0.3log20.3−0.2log20.2≈1.4855бит/символ. Избыточность (редундандность) и эффективность: редунд. R=L−H≈1.5−1.4855≈0.0145 бит/символ,эффективность =HL≈0.9903.
\text{редунд. }R=L-H\approx 1.5-1.4855\approx 0.0145\ \text{бит/символ}, \qquad \text{эффективность }=\frac{H}{L}\approx 0.9903. редунд. R=L−H≈1.5−1.4855≈0.0145бит/символ,эффективность=LH≈0.9903. Замечания об источнике с памятью (Марковская зависимость) и практические последствия: - Для источника с памятью релевантной мерой является энтропия в единицу времени (энтропийная скорость) H∞=limn→∞1nH(X1n)H_{\infty}= \lim_{n\to\infty}\tfrac{1}{n}H(X_1^n)H∞=limn→∞n1H(X1n), для первомарковского процесса это условная энтропия H(Xn∣Xn−1)H(X_n\mid X_{n-1})H(Xn∣Xn−1). - Кодирование по одному символу (символьный Хаффман) игнорирует зависимости и ограничено нецелыми длинами, даёт среднюю длину LLL с оценкой H≤L<H+1
H \le L < H+1 H≤L<H+1
(для кодирования символов). Для источника с памятью эталон — энтропийная скорость, и символьный код может быть далеким от неё. - Чтобы учесть память, применяют: - блоковое кодирование (Хаффман по блокам длины nnn): средняя длина на символ стремится к энтропийной скорости при росте nnn, но размер алфавита растёт экспоненциально; - контекстное/предиктивное моделирование + арифметическое кодирование или адаптивные методы (PPM, rANS, LZ): позволяют эффективно эксплуатировать зависимости и приближать среднюю длину к энтропийной скорости без целочисленных ограничений кодовых длин. - Практические следствия: наличие памяти обычно даёт возможность достичь лучшего сжатия (меньше бит/символ), но требует модели переходов и большего вычислительного/памятного ресурса; в реальных алгоритмах (аритметическое кодирование, PPM, современные энтропийные кодеры) предпочтение отдаётся учёту контекста и адаптивному моделированию, а не простому символьному Хаффману.
- Сортируем вероятности: 0.5, 0.3, 0.20.5,\,0.3,\,0.20.5,0.3,0.2. Сливаем две наименьшие 0.30.30.3 и 0.20.20.2 → 0.50.50.5. Получаем дерево, дающее, например, коды
A↦0,B↦10,C↦11. A \mapsto 0,\qquad B \mapsto 10,\qquad C \mapsto 11.
A↦0,B↦10,C↦11.
Средняя длина кода:
L=∑xp(x)ℓ(x)=0.5⋅1+0.3⋅2+0.2⋅2=1.5 бит/символ. L=\sum_{x} p(x) \ell(x)=0.5\cdot 1+0.3\cdot 2+0.2\cdot 2=1.5\ \text{бит/символ}.
L=x∑ p(x)ℓ(x)=0.5⋅1+0.3⋅2+0.2⋅2=1.5 бит/символ.
Энтропия источника:
H=−∑xp(x)log2p(x)=−0.5log20.5−0.3log20.3−0.2log20.2≈1.4855 бит/символ. H=-\sum_{x} p(x)\log_2 p(x)
= -0.5\log_2 0.5-0.3\log_2 0.3-0.2\log_2 0.2\approx 1.4855\ \text{бит/символ}.
H=−x∑ p(x)log2 p(x)=−0.5log2 0.5−0.3log2 0.3−0.2log2 0.2≈1.4855 бит/символ.
Избыточность (редундандность) и эффективность:
редунд. R=L−H≈1.5−1.4855≈0.0145 бит/символ,эффективность =HL≈0.9903. \text{редунд. }R=L-H\approx 1.5-1.4855\approx 0.0145\ \text{бит/символ},
\qquad \text{эффективность }=\frac{H}{L}\approx 0.9903.
редунд. R=L−H≈1.5−1.4855≈0.0145 бит/символ,эффективность =LH ≈0.9903.
Замечания об источнике с памятью (Марковская зависимость) и практические последствия:
- Для источника с памятью релевантной мерой является энтропия в единицу времени (энтропийная скорость) H∞=limn→∞1nH(X1n)H_{\infty}= \lim_{n\to\infty}\tfrac{1}{n}H(X_1^n)H∞ =limn→∞ n1 H(X1n ), для первомарковского процесса это условная энтропия H(Xn∣Xn−1)H(X_n\mid X_{n-1})H(Xn ∣Xn−1 ).
- Кодирование по одному символу (символьный Хаффман) игнорирует зависимости и ограничено нецелыми длинами, даёт среднюю длину LLL с оценкой
H≤L<H+1 H \le L < H+1
H≤L<H+1 (для кодирования символов). Для источника с памятью эталон — энтропийная скорость, и символьный код может быть далеким от неё.
- Чтобы учесть память, применяют:
- блоковое кодирование (Хаффман по блокам длины nnn): средняя длина на символ стремится к энтропийной скорости при росте nnn, но размер алфавита растёт экспоненциально;
- контекстное/предиктивное моделирование + арифметическое кодирование или адаптивные методы (PPM, rANS, LZ): позволяют эффективно эксплуатировать зависимости и приближать среднюю длину к энтропийной скорости без целочисленных ограничений кодовых длин.
- Практические следствия: наличие памяти обычно даёт возможность достичь лучшего сжатия (меньше бит/символ), но требует модели переходов и большего вычислительного/памятного ресурса; в реальных алгоритмах (аритметическое кодирование, PPM, современные энтропийные кодеры) предпочтение отдаётся учёту контекста и адаптивному моделированию, а не простому символьному Хаффману.