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


21

Код Хаффмана для розподілу ймовірностей - код префікса з мінімально зваженою середньою довжиною кодового слова , де - довжина го кодового слова. Загальновідома теорема, що середня довжина на символ коду Хаффмана становить між та , де - ентропія Шеннона розподілу ймовірностейppiiiiH(p)H(p)+1H(p)=ipilog2pi

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

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

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

1+lnln2ln2ln20.08607.

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

Відповіді:


19

Існує маса робіт, які вивчають саме ту проблему, яку ви згадуєте. Перший у серії - стаття Галлагера, "Варіації на тему Хаффмана", IEEE-IT, том. 24, 1978, с. 668-674. Він доводить , що різниця між середньою довжиною кодового слова коду Хаффмана і ентропії (він називає це кількість «надмірність») завжди строго менше (= по величині ймовірності в розподілі ймовірностей), в разі р 1 / 2 , а це менше , ніж р + 0,086 , якщо р < 1 / 2 . Кращі межі відомі, їх можна знайти в численних працях, в яких цитується робота Галлагера.pp1/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 , якщо ви також не маєте нижньої межі ймовірності одного елемента, тоді як ентропія2qq+k2q1q2q+k1q+kq+k .q+k2

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

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

даєA=52,B=76. Наш розподіл має52елементи з вірогідністю2 - 6,5 ,76з ймовірністю2 - 7,5 , і один елемент отримує залишки.A+B=128,A2+B/2128,maxAZAA=52,B=765226.57627.5

Тоді , тоді як код Хаффмана досягає ( 52 0,5 - 76 0,5 ) / 128 0,99436 втрати ентропії. (Між іншим, втрата ентропії має ім'я, чи робите ви кодування Хаффмана чи довільне кодування для Q : дивергенція Куллбека-Ліблера D ( P Q ) = p iH(X)=(526.5+767.5)/128=7.09375(520.5760.5)/1280.99436Q . Використовуючи це, я виявив кілька днів тому, призводить до більш жорстких двосторонніх меж Черноффа, як це можна побачити у Вікіпедії для меж Черноффа.)D(PQ)=pilogpiqi+(1pi)log1pi1qi


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

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

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

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

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