В теории информации: для дискретного источника с алфавитом {a,b,c,d} и вероятностями {0.5,0.25,0.125,0.125} вычислите энтропию источника, постройте оптимальный префиксный код (Хаффман) и обсудите, при каких условиях арифметическое кодирование даст значимое преимущество; дополнительно проанализируйте влияние корреляций между символами на выбор схем сжатия
2) Оптимальный префиксный код ХаффманХаффманХаффман
Построение короткокороткокоротко: два наименьших веса 0.125 и 0.125 объединяются в узел 0.25; далее веса 0.25 отc+dот c+dотc+d и 0.25 букваbбуква bбукваb объединяются в 0.5; далее 0.5 b+c+db+c+db+c+d и 0.5 букваaбуква aбукваa дают корень.
Один из возможных кодов равнооптималенравнооптималенравнооптимален:
Средняя длина кода L = ∑ pxxx · lxxx = 0.5·1 + 0.25·2 + 0.125·3 + 0.125·3 = 1.75 бит/символ.
Разница: L − H = 0. Так как вероятности являются степенями 1/2 диадическиедиадическиедиадические, Хаффман-код достигает энтропии точно — нулевая избыточность.
3) Когда арифметическое кодирование АКАКАК даёт значимое преимущество
Коротко:
АК наиболее полезно, когда оптимальные средние длины символов не целочисленны недиадическиене диадическиенедиадические. Тогда АК дает дробное число бит на символ и может приблизить энтропию гораздо точнее, чем Хаффман, у которого длины — целые биты.При статическом распределении: если распределение не диадическое, для длинных сообщений АК обычно даёт лучшее среднее число бит/символ приближаетсякHприближается к HприближаетсякH, тогда как простой Хаффман даёт L ≥ H + 0..10..10..1 бит/символ частоненулевуюизбыточностьчасто ненулевую избыточностьчастоненулевуюизбыточность. Для коротких сообщений накладные расходы АК инициализация,кодированиеграницинициализация, кодирование границинициализация,кодированиеграниц могут нивелировать преимущество.АК особенно выигрывает при моделях с высокой степенью точности контекстныемодели,PPM,смешанные/адаптивныемоделиконтекстные модели, PPM, смешанные/адаптивные моделиконтекстныемодели,PPM,смешанные/адаптивныемодели: он позволяет выдавать дробное количество бит для каждого символа и поддерживает адаптацию без экспоненциального роста алфавита.Если вероятность легко представима степенью 1/2 какввашемпримерекак в вашем примерекакввашемпримере, АК существенного выигрыша не даёт.
Практические замечания:
АК иегореализация—rangecodingи его реализация — range codingиегореализация—rangecoding более гибок и обычно даёт лучшее сжатие при сложном моделировании источника.АК требует аккуратной реализации предотвращениепереполнения,точностьпредотвращение переполнения, точностьпредотвращениепереполнения,точность, но на практике эти проблемы решаются rangecodingrange codingrangecoding.Для очень коротких сообщений и простых задач Хаффман проще и быстрее и может быть предпочтителен.
4) Влияние корреляций между символами на выбор схем сжатия
Энтропия и энтропийная скорость: при наличии корреляций источникспамятью,напримерМарковскийисточник с памятью, например Марковскийисточникспамятью,напримерМарковский важна энтропийная скорость H̄ = lim 1/n1/n1/n HX1..XnX1..XnX1..Xn. Она обычно меньше энтропии односимвольного распределения HXXX, и это значит, что существует дополнительный потенциал сжатия, если использовать корреляции.Хаффман на одной букве кодированиенезависимыхсимволовпомаргиналямкодирование независимых символов по маргиналямкодированиенезависимыхсимволовпомаргиналям не использует корреляции — он оптимален только для независимых символов. Чтобы использовать память источника в рамках префиксных кодов, нужно кодировать блоки символов совмещатьнесколькосимволоввсупер−символистроитьХаффманнаихсовместномраспределениисовмещать несколько символов в супер-символ и строить Хаффман на их совместном распределениисовмещатьнесколькосимволоввсупер−символистроитьХаффманнаихсовместномраспределении. Но совместный алфавит растёт экспоненциально ∣A∣k|A|^k∣A∣k и становится непрактичным при больших порядках памяти.Арифметическое кодирование + модель предсказания contextmodel,n−gram,PPM,переменныепорядкиcontext model, n-gram, PPM, переменные порядкиcontextmodel,n−gram,PPM,переменныепорядки — стандартный путь для использования корреляций: модель оценивает условные вероятности pxt∣контекстx_t | контекстxt∣контекст, а АК кодирует последовательность, выдавая близко к сумме −log pxt∣контекстx_t | контекстxt∣контекст бит на символ. Такой подход эффективно достигает условной энтропии HXt∣прошлоеX_t | прошлоеXt∣прошлое.Другие методы: LZ77/LZ78/LZW и их производные gzip,LZMAgzip, LZMAgzip,LZMA неявно используют повторяющиеся последовательности корреляциииповторяемостькорреляции и повторяемостькорреляциииповторяемость без явного моделирования условных вероятностей; они часто конкурентоспособны и хорошо масштабируются.Практический выбор: Если корреляции короткоплечные и модель небольшая — можно прибегнуть к АК с контекстной моделью или к блочному Хаффману малыйблокмалый блокмалыйблок.Для длинных зависимостей или повторов лучше LZ-подходы или статистические методы с АК.Если требуется простота и быстрота, и корреляции слабы — Хаффман на маргиналях может быть достаточен.
Короткий пример иллюстрации:
Пусть paaa=0.5 и часто после a идёт снова a сильнаяавтокорреляциясильная автокорреляциясильнаяавтокорреляция. Тогда условная энтропия HX<em>t∣X</em>t−1X<em>t | X</em>{t−1}X<em>t∣X</em>t−1 может быть значительно меньше HXtX_tXt, и код, использующий предсказатель + АК, даст меньше бит/символ, чем символоориентированный Хаффман.
5) Выводы / рекомендации
Для данного распределения {0.5,0.25,0.125,0.125} Хаффман даёт среднюю длину 1.75 бит/символ, равную энтропии — арифметическое кодирование здесь не даёт преимущества.Арифметическое/range-кодирование даёт значимое преимущество, когда распределения не диадические, когда требуется кодирование дробного числа бит на символ, при использовании гибких/адаптивных контекстных моделей и при длинных последовательностях.При наличии корреляций между символами эффективный путь — комбинация хорошей статистической модели контексты,предикторыконтексты, предикторыконтексты,предикторы и арифметического/range-кодера либо использование LZ-подходов; простое односимвольное Хаффман-кодирование в этом случае часто будет субоптимальным.
Если хотите, могу:
показать графическое дерево Хаффмана вASCIIв ASCIIвASCII,построить Хаффман и арифметический код для другого набора вероятностей,или продемонстрировать численный пример выигрыша АК при не-диадическом распределении.
1) Энтропия источника
Алфавит {a,b,c,d}, вероятности paaa=0.5, pbbb=0.25, pccc=0.125, pddd=0.125.
Энтропия вбитахнасимволв битах на символвбитахнасимвол H = −∑ pxxx log2 pxxx = −0.5·log2 0.5 −0.25·log2 0.25 −0.125·log2 0.125 −0.125·log2 0.125
= 0.5 + 0.5 + 0.375 + 0.375 = 1.75 бит/символ.
2) Оптимальный префиксный код ХаффманХаффманХаффман
Построение короткокороткокоротко: два наименьших веса 0.125 и 0.125 объединяются в узел 0.25; далее веса 0.25 отc+dот c+dотc+d и 0.25 букваbбуква bбукваb объединяются в 0.5; далее 0.5 b+c+db+c+db+c+d и 0.5 букваaбуква aбукваa дают корень.
Один из возможных кодов равнооптималенравнооптималенравнооптимален:
a : 0 длина1длина 1длина1b : 10 длина2длина 2длина2c : 110 длина3длина 3длина3d : 111 длина3длина 3длина3Средняя длина кода
L = ∑ pxxx · lxxx = 0.5·1 + 0.25·2 + 0.125·3 + 0.125·3 = 1.75 бит/символ.
Разница: L − H = 0. Так как вероятности являются степенями 1/2 диадическиедиадическиедиадические, Хаффман-код достигает энтропии точно — нулевая избыточность.
3) Когда арифметическое кодирование АКАКАК даёт значимое преимущество
Коротко:
АК наиболее полезно, когда оптимальные средние длины символов не целочисленны недиадическиене диадическиенедиадические. Тогда АК дает дробное число бит на символ и может приблизить энтропию гораздо точнее, чем Хаффман, у которого длины — целые биты.При статическом распределении: если распределение не диадическое, для длинных сообщений АК обычно даёт лучшее среднее число бит/символ приближаетсякHприближается к HприближаетсякH, тогда как простой Хаффман даёт L ≥ H + 0..10..10..1 бит/символ частоненулевуюизбыточностьчасто ненулевую избыточностьчастоненулевуюизбыточность. Для коротких сообщений накладные расходы АК инициализация,кодированиеграницинициализация, кодирование границинициализация,кодированиеграниц могут нивелировать преимущество.АК особенно выигрывает при моделях с высокой степенью точности контекстныемодели,PPM,смешанные/адаптивныемоделиконтекстные модели, PPM, смешанные/адаптивные моделиконтекстныемодели,PPM,смешанные/адаптивныемодели: он позволяет выдавать дробное количество бит для каждого символа и поддерживает адаптацию без экспоненциального роста алфавита.Если вероятность легко представима степенью 1/2 какввашемпримерекак в вашем примерекакввашемпримере, АК существенного выигрыша не даёт.Практические замечания:
АК иегореализация—rangecodingи его реализация — range codingиегореализация—rangecoding более гибок и обычно даёт лучшее сжатие при сложном моделировании источника.АК требует аккуратной реализации предотвращениепереполнения,точностьпредотвращение переполнения, точностьпредотвращениепереполнения,точность, но на практике эти проблемы решаются rangecodingrange codingrangecoding.Для очень коротких сообщений и простых задач Хаффман проще и быстрее и может быть предпочтителен.4) Влияние корреляций между символами на выбор схем сжатия
Энтропия и энтропийная скорость: при наличии корреляций источникспамятью,напримерМарковскийисточник с памятью, например Марковскийисточникспамятью,напримерМарковский важна энтропийная скорость H̄ = lim 1/n1/n1/n HX1..XnX1..XnX1..Xn. Она обычно меньше энтропии односимвольного распределения HXXX, и это значит, что существует дополнительный потенциал сжатия, если использовать корреляции.Хаффман на одной букве кодированиенезависимыхсимволовпомаргиналямкодирование независимых символов по маргиналямкодированиенезависимыхсимволовпомаргиналям не использует корреляции — он оптимален только для независимых символов. Чтобы использовать память источника в рамках префиксных кодов, нужно кодировать блоки символов совмещатьнесколькосимволоввсупер−символистроитьХаффманнаихсовместномраспределениисовмещать несколько символов в супер-символ и строить Хаффман на их совместном распределениисовмещатьнесколькосимволоввсупер−символистроитьХаффманнаихсовместномраспределении. Но совместный алфавит растёт экспоненциально ∣A∣k|A|^k∣A∣k и становится непрактичным при больших порядках памяти.Арифметическое кодирование + модель предсказания contextmodel,n−gram,PPM,переменныепорядкиcontext model, n-gram, PPM, переменные порядкиcontextmodel,n−gram,PPM,переменныепорядки — стандартный путь для использования корреляций: модель оценивает условные вероятности pxt∣контекстx_t | контекстxt ∣контекст, а АК кодирует последовательность, выдавая близко к сумме −log pxt∣контекстx_t | контекстxt ∣контекст бит на символ. Такой подход эффективно достигает условной энтропии HXt∣прошлоеX_t | прошлоеXt ∣прошлое.Другие методы: LZ77/LZ78/LZW и их производные gzip,LZMAgzip, LZMAgzip,LZMA неявно используют повторяющиеся последовательности корреляциииповторяемостькорреляции и повторяемостькорреляциииповторяемость без явного моделирования условных вероятностей; они часто конкурентоспособны и хорошо масштабируются.Практический выбор:Если корреляции короткоплечные и модель небольшая — можно прибегнуть к АК с контекстной моделью или к блочному Хаффману малыйблокмалый блокмалыйблок.Для длинных зависимостей или повторов лучше LZ-подходы или статистические методы с АК.Если требуется простота и быстрота, и корреляции слабы — Хаффман на маргиналях может быть достаточен.
Короткий пример иллюстрации:
Пусть paaa=0.5 и часто после a идёт снова a сильнаяавтокорреляциясильная автокорреляциясильнаяавтокорреляция. Тогда условная энтропия HX<em>t∣X</em>t−1X<em>t | X</em>{t−1}X<em>t∣X</em>t−1 может быть значительно меньше HXtX_tXt , и код, использующий предсказатель + АК, даст меньше бит/символ, чем символоориентированный Хаффман.5) Выводы / рекомендации
Для данного распределения {0.5,0.25,0.125,0.125} Хаффман даёт среднюю длину 1.75 бит/символ, равную энтропии — арифметическое кодирование здесь не даёт преимущества.Арифметическое/range-кодирование даёт значимое преимущество, когда распределения не диадические, когда требуется кодирование дробного числа бит на символ, при использовании гибких/адаптивных контекстных моделей и при длинных последовательностях.При наличии корреляций между символами эффективный путь — комбинация хорошей статистической модели контексты,предикторыконтексты, предикторыконтексты,предикторы и арифметического/range-кодера либо использование LZ-подходов; простое односимвольное Хаффман-кодирование в этом случае часто будет субоптимальным.Если хотите, могу:
показать графическое дерево Хаффмана вASCIIв ASCIIвASCII,построить Хаффман и арифметический код для другого набора вероятностей,или продемонстрировать численный пример выигрыша АК при не-диадическом распределении.