Поясните понятие энтропии и взаимной информации на дискретных распределениях; приведите пример кодирования Хаффмана для заданного распределения символов, докажите его оптимальность по средней длине кода и обсудите ограничения при непрерывных источниках и задержках
Ниже — сжатое, но формально корректное изложение по пунктам: понятия энтропии и взаимной информации для дискретных распределений, пример кодирования Хаффмана с вычислениями и доказательство оптимальности по средней длине кода, затем обсуждение ограничений для непрерывных источников и задержек латентностилатентностилатентности.
Энтропия и взаимная информация дискретныйслучайдискретный случайдискретныйслучай
Энтропия случайной величины X с конечным множеством значений X = {x1,...,xn} и вероятностями pxixixi = PX=xiX=xiX=xi определяется как HXXX = − sum_{i=1}^n pxixixi log2 pxixixi. Интерпретация: минимальное среднее число бит на символ при кодировании независимых одинаково распределённых i.i.d.i.i.d.i.i.d. символов при бесконечном блокировании асимптотическиасимптотическиасимптотически.
Свойства:
HXXX ≥ 0; максимум достигается при равномерном распределении H=log2nH = log2 nH=log2n.Аддитивность для независимых: HX,YX,YX,Y = HXXX + HYYY если X ⟂ Y.Неравенство Шеннона для моментальной префикснойпрефикснойпрефиксной кодировки: для любого префиксного кода со средними длинами l_i = длина кода для xi, HXXX ≤ ELLL = sum pxixixi l_i < HXXX + 1.
Взаимная информация двух дискретных величин X и Y: IX;YX;YX;Y = sum_{x,y} px,yx,yx,y log2 p(x,y)/(p(x)p(y)) p(x,y) / (p(x)p(y)) p(x,y)/(p(x)p(y)). Интерпретация: уменьшение неопределённости энтропииэнтропииэнтропии о X при известном Y: IX;YX;YX;Y = HXXX − HX∣YX|YX∣Y = HYYY − HY∣XY|XY∣X. Свойства: IX;YX;YX;Y ≥ 0, симметрична.
Пример: код Хаффмана для заданного распределения
Пусть алфавит {a,b,c,d} с вероятностями paaa=0.4, pbbb=0.3, pccc=0.2, pddd=0.1.
Шаги Хаффмана:
Возьмём две наименьшие вероятности: 0.1 ddd и 0.2 ccc → объединим в узел cd с вероятностью 0.3.Имеем 0.4 aaa, 0.3 bbb, 0.3 cdcdcd. Выберем две наименьшие 0.3и0.30.3 и 0.30.3и0.3 → объединим в узел B с вероятностью 0.6.Оставшиеся 0.4 aaa и 0.6 BBB объединяем в корень.
Назначим биты: a = 0 длина1длина 1длина1; B = 1 длина1длина 1длина1
Развернём B: b = 10 длина2длина 2длина2; cd = 11 длина2длина 2длина2
Развернём cd: c = 110 длина3длина 3длина3; d = 111 длина3длина 3длина3
Доказательство оптимальности алгоритма Хаффмана идеяиформулировкаидея и формулировкаидеяиформулировка
Теорема: код, получаемый алгоритмом Хаффмана, минимизирует среднюю длину ELLL среди всех префиксных моментальныхмоментальныхмоментальных кодов для заданных вероятностей {p_i}.
Доказательство классическое,поиндукции,саргументомобменаклассическое, по индукции, с аргументом обменаклассическое,поиндукции,саргументомобмена:
База: для n=2 — единственный префиксный код даёт минимальную длину.Индуктивный шаг: пусть для всех алфавитов с < n символами утверждение верно. Рассмотрим оптимальный префиксный код для n символов {1,...,n} с вероятностями упорядоченными p1 ≥ p2 ≥ ... ≥ pn. В оптимальном префиксном дереве два наимее вероятных символа pn−1иpnpn-1 и pnpn−1иpn можно считать соседями братьямибратьямибратьями: если это не так, можно показать операцией обмена символов в дереве, что существует оптимальный код, где два минимальных вероятностных символа являются листьями с одинаковой глубиной и общим родителем аргументобменанеухудшаетсреднююдлинуаргумент обмена не ухудшает среднюю длинуаргументобменанеухудшаетсреднююдлину. Тогда можно "сжать" эти два символа в один условный символ с вероятностью pn-1 + pn и рассмотреть задачу для n−1 символов; по индукции оптимальное дерево для уменьшённой задачи получается алгоритмом Хаффмана, а разворачивание узла даёт оптимальное дерево для исходной задачи. Таким образом жадный шаг объединятьдванаименьшихобъединять два наименьшихобъединятьдванаименьших является корректным и даёт оптимальный результат.Следствие: Хаффман минимизирует ELLL среди всех префиксных и, следовательно, среди всех однозначно декодируемых кодов Kraft–McMillan:набордлинliдопустимтогдаитолькотогда,когдаsum2−li≤1;длялюбыхтакихдлинсуществуетпрефиксныйкодсэтимидлинамиKraft–McMillan: набор длин l_i допустим тогда и только тогда, когда sum 2^{−l_i} ≤ 1; для любых таких длин существует префиксный код с этими длинамиKraft–McMillan:набордлинliдопустимтогдаитолькотогда,когдаsum2−li≤1;длялюбыхтакихдлинсуществуетпрефиксныйкодсэтимидлинами.
Это стандартный и жёстко формализуемый аргумент «greedy + optimal substructure».
Ограничения и нюансы при непрерывных источниках и при требованиях по задержке
Непрерывные источники:
Для непрерывной случайной величины X с плотностью fxxx определяют дифференциальную энтропию hXXX = − ∫ fxxx log2 fxxx dx. Но hXXX — не прямая замена дискретной энтропии: она не инвариантна относительно непрерывных одномерных преобразований смещение/шкаласмещение/шкаласмещение/шкала и может быть отрицательной; дифференциальная энтропия не даёт напрямую нижней границы на число бит для кодирования одной конкретной реализации — для практического кодирования непрерывных сигналов требуется квантование дискретизацияамплитудыдискретизация амплитудыдискретизацияамплитуды.Кодирование непрерывного источника обычно осуществляется в два этапа: iii квантование преобразованиевдискретныйалфавитпреобразование в дискретный алфавитпреобразованиевдискретныйалфавит либо разрешение ошибки допускаемоеспогрешностьюдопускаемое с погрешностьюдопускаемоеспогрешностью; iiiiii сжатие энтропийноекодированиеэнтропийное кодированиеэнтропийноекодирование квантованных уровней. При этом будет иметь место потеря информации дискретизациядискретизациядискретизация и оптимальный компромисс определяется теорией rate–distortion: минимальная скорость RDDD для допустимого среднего искажения D.Арифметическое кодирование и кодирование по контексту работают на потоках бит для квантованных значений и позволяют приближать энтропию очень близко, но всё равно требуется дискретизация входа.
Проблемы при бесконечном неограниченномнеограниченномнеограниченном алфавите:
Если алфавит счётный, но бесконечный, алгоритм Хаффмана формально неприменим нужноконечноедеревонужно конечное деревонужноконечноедерево. Для таких случаев используют схемы с отсечением хвоста приближённоприближённоприближённо или другие подходы например,универсальныекодыдляцелыхчисел:Eliasγ,δит.п.например, универсальные коды для целых чисел: Elias γ, δ и т. п.например,универсальныекодыдляцелыхчисел:Eliasγ,δит.п..
Задержка латентностьлатентностьлатентность и компромисс с эффективностью сжатия:
Хаффман в своей базовой форме — посимвольный возможноблоковыйвозможно блоковыйвозможноблоковый префиксный код. Для повышения эффективности часто кодируют блоки длины n коддляn−символьныхсловкод для n-символьных словкоддляn−символьныхслов: средняя длина на символ приближается к HXXX при n→∞ засчётAEP—асимптотическогоравномерногораспределениятипичныхпоследовательностейза счёт AEP — асимптотического равномерного распределения типичных последовательностейзасчётAEP—асимптотическогоравномерногораспределениятипичныхпоследовательностей. Однако блокирование увеличивает задержку нужнонакопитьnсимволовпередкодированиемнужно накопить n символов перед кодированиемнужнонакопитьnсимволовпередкодированием.Для минимальной задержки используют посимвольные или малые блоки, но это увеличивает избыточность E[L]−HE[L] − HE[L]−H.Переменная длина кода снижает среднюю длину, но приводит к непредсказуемому времени декодирования отдельных символов переменнаязадержкапеременная задержкапеременнаязадержка, требует синхронизации и устойчивости к ошибкам однобитовоеискажениеможетнарушитьпоследующуюдекодировкуодно битовое искажение может нарушить последующую декодировкуоднобитовоеискажениеможетнарушитьпоследующуюдекодировку.Арифметическое кодирование даёт очень малую избыточность даже для коротких блоков и работает последовательно приближённопотоковаясхемаприближённо потоковая схемаприближённопотоковаясхема, но требует высокоточной арифметики/контроля перекрытий и может вносить дополнительную задержку из‑за необходимости аккумулировать диапазон вероятностей и выполнять окончательное выравнивание/вывод битов; также более чувствительно к ошибкам в битстриме.Существуют схемы с управляемой задержкой:Fixed-to-variable HuffmanHuffmanHuffman — малую задержку, но ограниченная эффективность.Variable-to-fixed например,Tunstallнапример, Tunstallнапример,Tunstall — кодирует переменное число входных символов в фиксированное число выходных битов, что даёт падение вариации задержки, но требует больших словарей.Arithmetic / range coding — отличная эффективность, потоковый режим, но требует буферизации/точности.Практический компромисс зависит от требований: допустимая средняя скорость, максимум задержки, чувствительность к ошибкам, сложность реализации.
Конечные блоки и конечнопроблемность finite−blocklengthfinite-blocklengthfinite−blocklength:
Асимптотические результаты E[L]n→HE[L]_n → HE[L]n→H хороши, но для конечного n существует неизбежная избыточность. Эту избыточность можно оценивать асимптотически: при кодировании блоков длины n из i.i.d. источника разброс суммарной лог‑вероятности имеет порядок sqrtnnnцентральнаяпредельнаятеоремацентральная предельная теоремацентральнаяпредельнаятеорема, и редундансность/ошибка порядка O1/n1/n1/n или O(logn)/n(log n)/n(logn)/n в среднем; точные выражения зависят от дополнительной информации варианс«самоинформации»ит.п.варианс «самоинформации» и т. п.варианс«самоинформации»ит.п.. Следовательно, чтобы получить отступ от энтропии на ε нужно брать блоки достаточно большой длины n, что увеличивает задержку.Краткие практические рекомендацииДля дискретных конечных алфавитов и известных вероятностей: используйте Хаффман еслинужныпрефиксныекодыипростотаесли нужны префиксные коды и простотаеслинужныпрефиксныекодыипростота или арифметическое кодирование еслихотитеприближатьсякэнтропииболееплотноприразумнойзадержкеесли хотите приближаться к энтропии более плотно при разумной задержкееслихотитеприближатьсякэнтропииболееплотноприразумнойзадержке.Для непрерывных источников: сначала подходящая дискретизация/квантование или применение методов преобразования например,преобразованиеКарунена–Лоэве,векторноеквантованиенапример, преобразование Карунена–Лоэве, векторное квантованиенапример,преобразованиеКарунена–Лоэве,векторноеквантование, затем энтропийное кодирование квантованных уровней; оптимальный компромисс задаётся rate–distortion.При жёстких ограничениях по задержке: выбирайте схемы с минимальным блокированием возможноTunstallилималыеблоки+арифметическоекодированиевозможно Tunstall или малые блоки + арифметическое кодированиевозможноTunstallилималыеблоки+арифметическоекодирование, оценивайте допустимую избыточность и устойчивость к ошибкам.
Если хотите, могу:
Развернуто доказать оптимальность Хаффмана пошагово с формулами;Показать пример с другим распределением и/или кодированием блоков HuffmanнаблокахHuffman на блокахHuffmanнаблоках;Рассчитать пример квантования для простого непрерывного источника и показать воздействие на битрейт и искажение;Обсудить конкретные схемы для низкой задержки Tunstall,Huffman−on−the−fly,arithmeticwithflushingTunstall, Huffman-on-the-fly, arithmetic with flushingTunstall,Huffman−on−the−fly,arithmeticwithflushing.
Ниже — сжатое, но формально корректное изложение по пунктам: понятия энтропии и взаимной информации для дискретных распределений, пример кодирования Хаффмана с вычислениями и доказательство оптимальности по средней длине кода, затем обсуждение ограничений для непрерывных источников и задержек латентностилатентностилатентности.
Энтропия и взаимная информация дискретныйслучайдискретный случайдискретныйслучайЭнтропия случайной величины X с конечным множеством значений X = {x1,...,xn} и вероятностями pxixixi = PX=xiX=xiX=xi определяется как
HXXX = − sum_{i=1}^n pxixixi log2 pxixixi.
Интерпретация: минимальное среднее число бит на символ при кодировании независимых одинаково распределённых i.i.d.i.i.d.i.i.d. символов при бесконечном блокировании асимптотическиасимптотическиасимптотически.
Свойства:
HXXX ≥ 0; максимум достигается при равномерном распределении H=log2nH = log2 nH=log2n.Аддитивность для независимых: HX,YX,YX,Y = HXXX + HYYY если X ⟂ Y.Неравенство Шеннона для моментальной префикснойпрефикснойпрефиксной кодировки: для любого префиксного кода со средними длинами l_i = длина кода для xi,HXXX ≤ ELLL = sum pxixixi l_i < HXXX + 1.
Взаимная информация двух дискретных величин X и Y:
Пример: код Хаффмана для заданного распределенияIX;YX;YX;Y = sum_{x,y} px,yx,yx,y log2 p(x,y)/(p(x)p(y)) p(x,y) / (p(x)p(y)) p(x,y)/(p(x)p(y)).
Интерпретация: уменьшение неопределённости энтропииэнтропииэнтропии о X при известном Y: IX;YX;YX;Y = HXXX − HX∣YX|YX∣Y = HYYY − HY∣XY|XY∣X.
Свойства: IX;YX;YX;Y ≥ 0, симметрична.
Пусть алфавит {a,b,c,d} с вероятностями
paaa=0.4, pbbb=0.3, pccc=0.2, pddd=0.1.
Шаги Хаффмана:
Возьмём две наименьшие вероятности: 0.1 ddd и 0.2 ccc → объединим в узел cd с вероятностью 0.3.Имеем 0.4 aaa, 0.3 bbb, 0.3 cdcdcd. Выберем две наименьшие 0.3и0.30.3 и 0.30.3и0.3 → объединим в узел B с вероятностью 0.6.Оставшиеся 0.4 aaa и 0.6 BBB объединяем в корень.Назначим биты: a = 0 длина1длина 1длина1; B = 1 длина1длина 1длина1 Развернём B: b = 10 длина2длина 2длина2; cd = 11 длина2длина 2длина2 Развернём cd: c = 110 длина3длина 3длина3; d = 111 длина3длина 3длина3
Итоговые коды:
a: 0 la=1l_a=1la =1 b: 10 lb=2l_b=2lb =2 c: 110 lc=3l_c=3lc =3 d: 111 ld=3l_d=3ld =3
Средняя длина:
ELLL = 0.4·1 + 0.3·2 + 0.2·3 + 0.1·3 = 1.9 бита/символ.
Энтропия источника:
Доказательство оптимальности алгоритма Хаффмана идеяиформулировкаидея и формулировкаидеяиформулировкаHXXX = −0.4log20.4+0.3log20.3+0.2log20.2+0.1log20.10.4 log2 0.4 + 0.3 log2 0.3 + 0.2 log2 0.2 + 0.1 log2 0.10.4log20.4+0.3log20.3+0.2log20.2+0.1log20.1 ≈ 1.8464 бит.
Проверка неравенства: H ≈1.8464 ≤ ELLL=1.9 < H+1 ≈2.8464 — выполняется.
Теорема: код, получаемый алгоритмом Хаффмана, минимизирует среднюю длину ELLL среди всех префиксных моментальныхмоментальныхмоментальных кодов для заданных вероятностей {p_i}.
Доказательство классическое,поиндукции,саргументомобменаклассическое, по индукции, с аргументом обменаклассическое,поиндукции,саргументомобмена:
База: для n=2 — единственный префиксный код даёт минимальную длину.Индуктивный шаг: пусть для всех алфавитов с < n символами утверждение верно. Рассмотрим оптимальный префиксный код для n символов {1,...,n} с вероятностями упорядоченными p1 ≥ p2 ≥ ... ≥ pn. В оптимальном префиксном дереве два наимее вероятных символа pn−1иpnpn-1 и pnpn−1иpn можно считать соседями братьямибратьямибратьями: если это не так, можно показать операцией обмена символов в дереве, что существует оптимальный код, где два минимальных вероятностных символа являются листьями с одинаковой глубиной и общим родителем аргументобменанеухудшаетсреднююдлинуаргумент обмена не ухудшает среднюю длинуаргументобменанеухудшаетсреднююдлину. Тогда можно "сжать" эти два символа в один условный символ с вероятностью pn-1 + pn и рассмотреть задачу для n−1 символов; по индукции оптимальное дерево для уменьшённой задачи получается алгоритмом Хаффмана, а разворачивание узла даёт оптимальное дерево для исходной задачи. Таким образом жадный шаг объединятьдванаименьшихобъединять два наименьшихобъединятьдванаименьших является корректным и даёт оптимальный результат.Следствие: Хаффман минимизирует ELLL среди всех префиксных и, следовательно, среди всех однозначно декодируемых кодов Kraft–McMillan:набордлинliдопустимтогдаитолькотогда,когдаsum2−li≤1;длялюбыхтакихдлинсуществуетпрефиксныйкодсэтимидлинамиKraft–McMillan: набор длин l_i допустим тогда и только тогда, когда sum 2^{−l_i} ≤ 1; для любых таких длин существует префиксный код с этими длинамиKraft–McMillan:набордлинli допустимтогдаитолькотогда,когдаsum2−li ≤1;длялюбыхтакихдлинсуществуетпрефиксныйкодсэтимидлинами.Это стандартный и жёстко формализуемый аргумент «greedy + optimal substructure».
Ограничения и нюансы при непрерывных источниках и при требованиях по задержкеНепрерывные источники:
Для непрерывной случайной величины X с плотностью fxxx определяют дифференциальную энтропиюhXXX = − ∫ fxxx log2 fxxx dx.
Но hXXX — не прямая замена дискретной энтропии: она не инвариантна относительно непрерывных одномерных преобразований смещение/шкаласмещение/шкаласмещение/шкала и может быть отрицательной; дифференциальная энтропия не даёт напрямую нижней границы на число бит для кодирования одной конкретной реализации — для практического кодирования непрерывных сигналов требуется квантование дискретизацияамплитудыдискретизация амплитудыдискретизацияамплитуды.Кодирование непрерывного источника обычно осуществляется в два этапа: iii квантование преобразованиевдискретныйалфавитпреобразование в дискретный алфавитпреобразованиевдискретныйалфавит либо разрешение ошибки допускаемоеспогрешностьюдопускаемое с погрешностьюдопускаемоеспогрешностью; iiiiii сжатие энтропийноекодированиеэнтропийное кодированиеэнтропийноекодирование квантованных уровней. При этом будет иметь место потеря информации дискретизациядискретизациядискретизация и оптимальный компромисс определяется теорией rate–distortion: минимальная скорость RDDD для допустимого среднего искажения D.Арифметическое кодирование и кодирование по контексту работают на потоках бит для квантованных значений и позволяют приближать энтропию очень близко, но всё равно требуется дискретизация входа.
Проблемы при бесконечном неограниченномнеограниченномнеограниченном алфавите:
Если алфавит счётный, но бесконечный, алгоритм Хаффмана формально неприменим нужноконечноедеревонужно конечное деревонужноконечноедерево. Для таких случаев используют схемы с отсечением хвоста приближённоприближённоприближённо или другие подходы например,универсальныекодыдляцелыхчисел:Eliasγ,δит.п.например, универсальные коды для целых чисел: Elias γ, δ и т. п.например,универсальныекодыдляцелыхчисел:Eliasγ,δит.п..Задержка латентностьлатентностьлатентность и компромисс с эффективностью сжатия:
Хаффман в своей базовой форме — посимвольный возможноблоковыйвозможно блоковыйвозможноблоковый префиксный код. Для повышения эффективности часто кодируют блоки длины n коддляn−символьныхсловкод для n-символьных словкоддляn−символьныхслов: средняя длина на символ приближается к HXXX при n→∞ засчётAEP—асимптотическогоравномерногораспределениятипичныхпоследовательностейза счёт AEP — асимптотического равномерного распределения типичных последовательностейзасчётAEP—асимптотическогоравномерногораспределениятипичныхпоследовательностей. Однако блокирование увеличивает задержку нужнонакопитьnсимволовпередкодированиемнужно накопить n символов перед кодированиемнужнонакопитьnсимволовпередкодированием.Для минимальной задержки используют посимвольные или малые блоки, но это увеличивает избыточность E[L]−HE[L] − HE[L]−H.Переменная длина кода снижает среднюю длину, но приводит к непредсказуемому времени декодирования отдельных символов переменнаязадержкапеременная задержкапеременнаязадержка, требует синхронизации и устойчивости к ошибкам однобитовоеискажениеможетнарушитьпоследующуюдекодировкуодно битовое искажение может нарушить последующую декодировкуоднобитовоеискажениеможетнарушитьпоследующуюдекодировку.Арифметическое кодирование даёт очень малую избыточность даже для коротких блоков и работает последовательно приближённопотоковаясхемаприближённо потоковая схемаприближённопотоковаясхема, но требует высокоточной арифметики/контроля перекрытий и может вносить дополнительную задержку из‑за необходимости аккумулировать диапазон вероятностей и выполнять окончательное выравнивание/вывод битов; также более чувствительно к ошибкам в битстриме.Существуют схемы с управляемой задержкой:Fixed-to-variable HuffmanHuffmanHuffman — малую задержку, но ограниченная эффективность.Variable-to-fixed например,Tunstallнапример, Tunstallнапример,Tunstall — кодирует переменное число входных символов в фиксированное число выходных битов, что даёт падение вариации задержки, но требует больших словарей.Arithmetic / range coding — отличная эффективность, потоковый режим, но требует буферизации/точности.Практический компромисс зависит от требований: допустимая средняя скорость, максимум задержки, чувствительность к ошибкам, сложность реализации.Конечные блоки и конечнопроблемность finite−blocklengthfinite-blocklengthfinite−blocklength:
Асимптотические результаты E[L]n→HE[L]_n → HE[L]n →H хороши, но для конечного n существует неизбежная избыточность. Эту избыточность можно оценивать асимптотически: при кодировании блоков длины n из i.i.d. источника разброс суммарной лог‑вероятности имеет порядок sqrtnnn центральнаяпредельнаятеоремацентральная предельная теоремацентральнаяпредельнаятеорема, и редундансность/ошибка порядка O1/n1/n1/n или O(logn)/n(log n)/n(logn)/n в среднем; точные выражения зависят от дополнительной информации варианс«самоинформации»ит.п.варианс «самоинформации» и т. п.варианс«самоинформации»ит.п.. Следовательно, чтобы получить отступ от энтропии на ε нужно брать блоки достаточно большой длины n, что увеличивает задержку.Краткие практические рекомендацииДля дискретных конечных алфавитов и известных вероятностей: используйте Хаффман еслинужныпрефиксныекодыипростотаесли нужны префиксные коды и простотаеслинужныпрефиксныекодыипростота или арифметическое кодирование еслихотитеприближатьсякэнтропииболееплотноприразумнойзадержкеесли хотите приближаться к энтропии более плотно при разумной задержкееслихотитеприближатьсякэнтропииболееплотноприразумнойзадержке.Для непрерывных источников: сначала подходящая дискретизация/квантование или применение методов преобразования например,преобразованиеКарунена–Лоэве,векторноеквантованиенапример, преобразование Карунена–Лоэве, векторное квантованиенапример,преобразованиеКарунена–Лоэве,векторноеквантование, затем энтропийное кодирование квантованных уровней; оптимальный компромисс задаётся rate–distortion.При жёстких ограничениях по задержке: выбирайте схемы с минимальным блокированием возможноTunstallилималыеблоки+арифметическоекодированиевозможно Tunstall или малые блоки + арифметическое кодированиевозможноTunstallилималыеблоки+арифметическоекодирование, оценивайте допустимую избыточность и устойчивость к ошибкам.Если хотите, могу:
Развернуто доказать оптимальность Хаффмана пошагово с формулами;Показать пример с другим распределением и/или кодированием блоков HuffmanнаблокахHuffman на блокахHuffmanнаблоках;Рассчитать пример квантования для простого непрерывного источника и показать воздействие на битрейт и искажение;Обсудить конкретные схемы для низкой задержки Tunstall,Huffman−on−the−fly,arithmeticwithflushingTunstall, Huffman-on-the-fly, arithmetic with flushingTunstall,Huffman−on−the−fly,arithmeticwithflushing.