Алгоритм Шеннона — Фано — один з перших алгоритмів стиснення, який сформулювали американські вчені Шеннон і Фано. Даний метод стиснення має велику схожість з алгоритмом Хаффмана, який з'явився на кілька років пізніше. Алгоритм використовує коди змінної довжини: символ, який часто зустрічається, кодується кодом меншої довжини, а той що рідше зустрічається — кодом більшої довжини. Коди Шеннона — Фано префіксні, тобто ніяке кодове слово не є префіксом будь-якого іншого. Ця властивість дозволяє однозначно декодувати будь-яку послідовність кодових слів.
Основні відомості
Кодування Шеннона — Фано (англ. Shannon-Fano coding) — алгоритм префіксного неоднорідного кодування. Відноситься до ймовірнісних методів стиснення (точніше, методів нульового порядку). Подібно алгоритму Хаффмана, алгоритм Шеннона — Фано використовує надмірність повідомлення, укладених в неоднорідному розподілі частот його символів () алфавіту, тобто замінює коди символів, які частіше використовуються, короткими двійковими послідовностями, а коди більш рідкісних символів — більш довгими двійковими послідовностями.
Алгоритм був незалежно один від одного розроблений Шенноном (публікація «Математична теорія зв'язку», 1948 рік) і, пізніше, Фано (опубліковано як технічний звіт).
Основні етапи
- Символи первинного алфавіту m1 виписують в порядку зменшення ймовірностей.
- Символи отриманого алфавіту ділять на дві частини, сумарні ймовірності символів яких максимально близькі один одному.
- У префіксному коді для першої частини алфавіту присвоюється двійкова цифра «0», другої частини — «1».
- Отримані частини рекурсивно діляться і їх частинам призначаються відповідні двійкові цифри в префіксному коді.
Коли розмір підалфавіту стає рівним нулю або одиниці, то наступне подовження префіксних коду для відповідних йому символів первинного алфавіту не відбувається, таким чином, алгоритм привласнює різним символам префіксні коди різної довжини. На кроці ділення алфавіту існує неоднозначність, так як різниця сумарних ймовірностей може бути однакова для двох варіантів поділу (враховуючи, що всі символи первинного алфавіту мають ймовірність більше нуля).
Алгоритм обчислення кодів Шеннона — Фано
Код Шеннона — Фано будується за допомогою дерева. Побудова цього дерева починається від кореня. Вся множина кодованих елементів відповідає кореню дерева (вершині першого рівня). Воно розбивається на дві підмножини з приблизно однаковими сумарними ймовірностями. Ці підмножини відповідають двом вершинам другого рівня, які з'єднуються з коренем. Далі кожна з цих підмножин розбивається на дві підмножини з приблизно однаковими сумарними ймовірностями. Їм відповідають вершини третього рівня. Якщо підмножина містить єдиний елемент, то йому відповідає кінцева вершина кодового дерева; така підмножина розбиттю не підлягає. Подібним чином поступаємо до тих пір, поки не отримаємо всі кінцеві вершини. Гілки кодового дерева розмічаємо символами 1 і 0, як у випадку коду Хаффмана.
При побудові коду Шеннона — Фано розбиття множини елементів може бути обрано, взагалі кажучи, декількома способами. Вибір розбиття на рівні n може погіршити варіанти розбиття на наступному рівні (n + 1) і призвести до неоптимальності коду в цілому. Іншими словами, оптимальна поведінка на кожному кроці шляху ще не гарантує оптимальності всієї сукупності дій. Тому код Шеннона — Фано не є оптимальним в загальному сенсі, хоча і дає оптимальні результати при деяких розподілах імовірностей. Для одного і того ж розподілу ймовірностей можна побудувати, взагалі кажучи, кілька кодів Шеннона — Фано, і всі вони можуть дати різні результати. Якщо побудувати всі можливі коди Шеннона — Фано для даного розподілу ймовірностей, то серед них будуть знаходитися і всі коди Хаффмана, тобто оптимальні коди.
Приклад кодового дерева
Вихідні символи:
- A (частота входження 50)
- B (частота входження 39)
- C (частота входження 18)
- D (частота входження 49)
- E (частота входження 35)
- F (частота входження 24)
ABCDEF(215) | ||||||
---|---|---|---|---|---|---|
ABC(107) | DEF(108) | |||||
A(50) | BC(57) | EF(59) | D(49) | |||
B(39) | C(18) | E(35) | F(24) |
Отриманий код: A — 11, B — 101, C — 100, D — 00, E — 011, F — 010.
Кодування Шеннона —Фано є досить старим методом стиснення і на сьогоднішній день воно не представляє особливого практичного інтересу. У більшості випадків довжина послідовності, стиснутої за цим методом, дорівнює довжині стиснутої послідовності з використанням кодування Хаффмана. Але на деяких послідовностях можуть сформуватися неоптимальні коди Шеннона — Фано, тому більш ефективним вважається стиснення методом Хаффмана.
Література
- , И. М. Яглом. Вероятность и информация. — Издание третье, переработанное и дополненное. — Москва : Наука, 1973. — 512 с. (рос.)
- C. E. Shannon A Mathematical Theory of Communication [ 15 липня 1998 у Wayback Machine.] // Bell System Technical Journal. — № 27. — July 1948. — P. 379—423. (англ.)
- R. M. Fano The transmission of information // Technical Report. — № 65. — Cambridge (Mass., USA): Research Laboratory of Electronics at MIT, 1949. — P. 51. (англ.)
Ця стаття потребує додаткових для поліпшення її . (грудень 2015) |
Це незавершена стаття про алгоритми. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Algoritm Shennona Fano odin z pershih algoritmiv stisnennya yakij sformulyuvali amerikanski vcheni Shennon i Fano Danij metod stisnennya maye veliku shozhist z algoritmom Haffmana yakij z yavivsya na kilka rokiv piznishe Algoritm vikoristovuye kodi zminnoyi dovzhini simvol yakij chasto zustrichayetsya koduyetsya kodom menshoyi dovzhini a toj sho ridshe zustrichayetsya kodom bilshoyi dovzhini Kodi Shennona Fano prefiksni tobto niyake kodove slovo ne ye prefiksom bud yakogo inshogo Cya vlastivist dozvolyaye odnoznachno dekoduvati bud yaku poslidovnist kodovih sliv Priklad koduvannya 6 simvoliv Osnovni vidomostiKoduvannya Shennona Fano angl Shannon Fano coding algoritm prefiksnogo neodnoridnogo koduvannya Vidnositsya do jmovirnisnih metodiv stisnennya tochnishe metodiv nulovogo poryadku Podibno algoritmu Haffmana algoritm Shennona Fano vikoristovuye nadmirnist povidomlennya ukladenih v neodnoridnomu rozpodili chastot jogo simvoliv alfavitu tobto zaminyuye kodi simvoliv yaki chastishe vikoristovuyutsya korotkimi dvijkovimi poslidovnostyami a kodi bilsh ridkisnih simvoliv bilsh dovgimi dvijkovimi poslidovnostyami Algoritm buv nezalezhno odin vid odnogo rozroblenij Shennonom publikaciya Matematichna teoriya zv yazku 1948 rik i piznishe Fano opublikovano yak tehnichnij zvit Osnovni etapiSimvoli pervinnogo alfavitu m1 vipisuyut v poryadku zmenshennya jmovirnostej Simvoli otrimanogo alfavitu dilyat na dvi chastini sumarni jmovirnosti simvoliv yakih maksimalno blizki odin odnomu U prefiksnomu kodi dlya pershoyi chastini alfavitu prisvoyuyetsya dvijkova cifra 0 drugoyi chastini 1 Otrimani chastini rekursivno dilyatsya i yih chastinam priznachayutsya vidpovidni dvijkovi cifri v prefiksnomu kodi Koli rozmir pidalfavitu staye rivnim nulyu abo odinici to nastupne podovzhennya prefiksnih kodu dlya vidpovidnih jomu simvoliv pervinnogo alfavitu ne vidbuvayetsya takim chinom algoritm privlasnyuye riznim simvolam prefiksni kodi riznoyi dovzhini Na kroci dilennya alfavitu isnuye neodnoznachnist tak yak riznicya sumarnih jmovirnostej p0 p1 displaystyle p 0 p 1 mozhe buti odnakova dlya dvoh variantiv podilu vrahovuyuchi sho vsi simvoli pervinnogo alfavitu mayut jmovirnist bilshe nulya Algoritm obchislennya kodiv Shennona FanoKoduvannya Shennona Fano Kod Shennona Fano buduyetsya za dopomogoyu dereva Pobudova cogo dereva pochinayetsya vid korenya Vsya mnozhina kodovanih elementiv vidpovidaye korenyu dereva vershini pershogo rivnya Vono rozbivayetsya na dvi pidmnozhini z priblizno odnakovimi sumarnimi jmovirnostyami Ci pidmnozhini vidpovidayut dvom vershinam drugogo rivnya yaki z yednuyutsya z korenem Dali kozhna z cih pidmnozhin rozbivayetsya na dvi pidmnozhini z priblizno odnakovimi sumarnimi jmovirnostyami Yim vidpovidayut vershini tretogo rivnya Yaksho pidmnozhina mistit yedinij element to jomu vidpovidaye kinceva vershina kodovogo dereva taka pidmnozhina rozbittyu ne pidlyagaye Podibnim chinom postupayemo do tih pir poki ne otrimayemo vsi kincevi vershini Gilki kodovogo dereva rozmichayemo simvolami 1 i 0 yak u vipadku kodu Haffmana Pri pobudovi kodu Shennona Fano rozbittya mnozhini elementiv mozhe buti obrano vzagali kazhuchi dekilkoma sposobami Vibir rozbittya na rivni n mozhe pogirshiti varianti rozbittya na nastupnomu rivni n 1 i prizvesti do neoptimalnosti kodu v cilomu Inshimi slovami optimalna povedinka na kozhnomu kroci shlyahu she ne garantuye optimalnosti vsiyeyi sukupnosti dij Tomu kod Shennona Fano ne ye optimalnim v zagalnomu sensi hocha i daye optimalni rezultati pri deyakih rozpodilah imovirnostej Dlya odnogo i togo zh rozpodilu jmovirnostej mozhna pobuduvati vzagali kazhuchi kilka kodiv Shennona Fano i vsi voni mozhut dati rizni rezultati Yaksho pobuduvati vsi mozhlivi kodi Shennona Fano dlya danogo rozpodilu jmovirnostej to sered nih budut znahoditisya i vsi kodi Haffmana tobto optimalni kodi Priklad kodovogo dereva Vihidni simvoli A chastota vhodzhennya 50 B chastota vhodzhennya 39 C chastota vhodzhennya 18 D chastota vhodzhennya 49 E chastota vhodzhennya 35 F chastota vhodzhennya 24 ABCDEF 215 ABC 107 DEF 108 A 50 BC 57 EF 59 D 49 B 39 C 18 E 35 F 24 Otrimanij kod A 11 B 101 C 100 D 00 E 011 F 010 Koduvannya Shennona Fano ye dosit starim metodom stisnennya i na sogodnishnij den vono ne predstavlyaye osoblivogo praktichnogo interesu U bilshosti vipadkiv dovzhina poslidovnosti stisnutoyi za cim metodom dorivnyuye dovzhini stisnutoyi poslidovnosti z vikoristannyam koduvannya Haffmana Ale na deyakih poslidovnostyah mozhut sformuvatisya neoptimalni kodi Shennona Fano tomu bilsh efektivnim vvazhayetsya stisnennya metodom Haffmana Literatura I M Yaglom Veroyatnost i informaciya Izdanie trete pererabotannoe i dopolnennoe Moskva Nauka 1973 512 s ros C E Shannon A Mathematical Theory of Communication 15 lipnya 1998 u Wayback Machine Bell System Technical Journal 27 July 1948 P 379 423 angl R M Fano The transmission of information Technical Report 65 Cambridge Mass USA Research Laboratory of Electronics at MIT 1949 P 51 angl Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno gruden 2015 Ce nezavershena stattya pro algoritmi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi