Наскільки хороший код Хаффмана, коли немає великих імовірних букв?


21

Код Хаффмана для розподілу ймовірностей - код префікса з мінімально зваженою середньою довжиною кодового слова , де - довжина го кодового слова. Загальновідома теорема, що середня довжина на символ коду Хаффмана становить між та , де - ентропія Шеннона розподілу ймовірностейp∑piℓiℓiiH(p)H(p)+1H(p)=−∑ipilog2⁡pi

Канонічний поганий приклад, коли середня довжина перевищує ентропію Шеннона майже на 1, - це розподіл ймовірностей, такий як , де ентропія майже 0, а середня довжина кодового слова - 1. Це дає зазор між ентропією та довжиною кодового слова майже .{.999,.001}1

Але що відбувається, коли існує обмеження найбільшої ймовірності в розподілі ймовірностей? Припустимо, наприклад, що всі ймовірності менші ніж . Найбільший розрив, який я міг би знайти в цьому випадку, полягає в розподілі ймовірностей, таких як , де ентропія трохи більше 1, а середня довжина кодового слова трохи менше 1,5, що дає розрив наближається до . Це найкраще, що ви можете зробити? Чи можете ви вказати верхню межу зазору, яка строго менша за 1 для цього випадку?12{.499,.499,.002}0.5

Тепер розглянемо випадок, коли всі ймовірності дуже малі. Припустимо , ви вибираєте розподіл ймовірностей букв, кожна з яких має ймовірність 1 / M . У цьому випадку найбільший розрив виникає, якщо вибрати M ≈ 2 k ln 2 . Тут ви отримуєте проміжок навколо Це найкраще, що ви можете зробити в ситуації, коли всі ймовірності невеликі?M1/MM≈2kln⁡2

1+ln⁡ln⁡2−ln⁡2ln⁡2≈0.08607.

Це питання було натхнене цим питанням TCS Stackexchange .

Відповіді:


19

Існує маса робіт, які вивчають саме ту проблему, яку ви згадуєте. Перший у серії - стаття Галлагера, "Варіації на тему Хаффмана", IEEE-IT, том. 24, 1978, с. 668-674. Він доводить , що різниця між середньою довжиною кодового слова коду Хаффмана і ентропії (він називає це кількість «надмірність») завжди строго менше (= по величині ймовірності в розподілі ймовірностей), в разі р ≥ 1 / 2 , а це менше , ніж р + 0,086 , якщо р < 1 / 2 . Кращі межі відомі, їх можна знайти в численних працях, в яких цитується робота Галлагера.pp≥1/2p+0.086p<1/2


2
Оптимальна межа була знайдена Манштеттеном, щільна межа надмірності кодів Хаффмана .
— Yuval Filmus

2

Судячи з обмеженості , я вважаю, що ви мали намір задати інше питання ... або ви просто не вказали, як ви приймаєте "середнє". Тож я відповім обом. Відповідь не на обидва питання.H(p)≤…≤H(p)+1

По-перше, якщо ви визначаєте середню довжину коду, використовуючи рівномірний розподіл на кодові слова, і приймаєте як верхню межу щодо ймовірності будь-якого одного елемента, то розгляньте код довжини q + k, де 2 q - 1 кодові слова мають довжину q а решта 2 q + k - 1 мають довжину q + k . Для розподілу, ідеально закодованого цим кодом, середня довжина наближається до q + k , якщо ви також не маєте нижньої межі ймовірності одного елемента, тоді як ентропія2−qq+k2q−1q2q+k−1q+kq+k .q+k2

Тепер розглянемо "середню довжину", що означає середню довжину кодового слова, коли код Хаффмана використовується для кодування . Тут межа щільно, і приклад розподілу його досягнення в межі є той , в якому кожен елемент має місце з ймовірністю 2 д ± 1 / 2 для д ∈ Z . (Кінцевому елементу присвоюється будь-яка вірогідність залишку, але це не матиме різниці асимптотично).p2q±1/2q∈Z.

Наприклад, розглянемо Потімq=7.

даєA=52,B=76. Наш розподіл має52елементи з вірогідністю2 - 6,5 ,76з ймовірністю2 - 7,5 , і один елемент отримує залишки.A+B=128,A2+B/2≤128,maxA∈ZAA=52,B=76522−6.5762−7.5

Тоді , тоді як код Хаффмана досягає ( 52 ⋅ 0,5 - 76 ⋅ 0,5 ) / 128 ≈ 0,99436 втрати ентропії. (Між іншим, втрата ентропії має ім'я, чи робите ви кодування Хаффмана чи довільне кодування для Q : дивергенція Куллбека-Ліблера D ( P ‖ Q ) = ∑ p iH(X)=(52⋅6.5+76⋅7.5)/128=7.09375(52⋅0.5−76⋅0.5)/128≈0.99436Q . Використовуючи це, я виявив кілька днів тому, призводить до більш жорстких двосторонніх меж Черноффа, як це можна побачити у Вікіпедії для меж Черноффа.)D(P‖Q)=∑pilog⁡piqi+∑(1−pi)log⁡1−pi1−qi


1
Мене дещо бентежить цей другий приклад. Якщо у вас 128 кодових слів, то існує код із середньою довжиною слова 7 (насправді всі довжини слова мають 7), що суперечить вашому твердженню, що ентропія - 7.09375. Ентропія цього розподілу (яку ви отримуєте, взявши середньозважене значення а не середнє) - 6,88, тоді як середня довжина коду Хаффмана - 7. Це дає розрив (або розбіжність Куллбека-Ліблера) приблизно 0,12, що здається трохи кращим, ніж мій приклад, але не близький до 1.−log2⁡pi
— Пітер Шор

І справді, ви праві. Я мав намір запитати про очікувану довжину кодового слова під розподілом ймовірності . p
— Пітер Шор

До жаль, я прорахувався про проти Б . Ми все ще хочемо A √AB трохи менше2k, але щось на зразокA+2B=2k, щоб примусити менші записи до нижнього ряду. Це даєA= 2 - 1 / √A2+B/22kA+2B=2kA=2−1/22−1B.
— Карл

Насправді це було б ... але ця система рівнянь не має позитивного рішення - схоже, ми не можемо змусити все бути напівцілістю 2 . Тож замість √2A+B2 і1/ √2 ми можемо вважати, наприклад(1+x)/2kдля половини коду Хаффмана і(1-x)/2 k + 1 для решти, даючи3∗2kзаписи ...1/2(1+x)/2k(1−x)/2k+13∗2k
— Карл

Отже, спробуйте це (не оптимально - гадаю, це залежить від того, як ви вирішите округлити чи вгору). записів з ймовірністю 1 / 128 і 128 записів з ймовірністю 1 / 256 має ентропійний 7.5 . Замість того, щоб змінити що 64 записів з ймовірністю 1 / 128 √641/1281281/2567.564 і128записів з ймовірністю1/256(2-1/ √1/1282128. Ентропія цього розподілу дорівнює1/(2 √1/256(2−1/2)який дає 6.4023,той час як ентропія коду Хаффмана 7.5 під формі, і(1-2 - 1,5 )*7+2 - 1,5 *8=7,3535. Тож якщо я не прорахував (і це роблю часто), це дає розрив приблизно в0,95. 1/(22)∗7.5+(1−1/(2(2)))∗5.802(1−2−1.5)∗7+2−1.5∗8=7.3535.0.95
— Карл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.