Алгоритм Шеннона

Матеріал з testwiki
Версія від 09:09, 22 травня 2022, створена imported>InternetArchiveBot (Виправлено джерел: 2; позначено як недійсні: 0.) #IABot (v2.0.8.7)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Кодування Шеннона, назване на честь творця, Клода Шеннона, — безвтратна техніка стиснення даних для побудови префіксного коду, яка ґрунтується на наборі символів і їх імовірностях (розрахованих або виміряних). Кодування Шеннона субоптимальне в тому сенсі, що не досягає найменшої можливої очікуваної довжини кодового слова, подібно до кодування Гаффмана, і не краще але інколи рівне кодуванню Шеннона — Фано.

Метод був першим у своєму роді, цю методику використано під час доведення Шаблон:Нп в його статті 1948 року «Математична теорія зв'язку»[1].

Цей метод кодування породив галузь теорії інформації, і без нього світ не мав би жодного з багатьох наступників; наприклад кодування Шеннона — Фано, кодування Гаффмана або арифметичного кодування. Значна частина нашого повсякденного життя пов'язана з цифровими даними, і це було б неможливим без кодування Шеннона та постійної еволюції його методів.[2]

У кодуванні Шеннона символи розміщуються в порядку від найбільш імовірних до найменш імовірних. Їм призначаються коди з перших li=logpi цифр двійкового розкладу кумулятивної ймовірності k=1i1pk. Тут x позначає функцію стеля, яка округлює x до найближчого цілого значення, більшого або рівного x.

Приклад

У таблиці наведено приклад кодування методом Шеннона. За підсумковим кодом можна помітити, що він є менш оптимальним, ніж алгоритм Шеннона — Фано.

Перший крок — підрахунок імовірностей кожного символу. Потім рахується число l для кожної ймовірності. Наприклад, для a2 воно дорівнює 3 (230,1822 — найменший степінь двійки —3, отже l=3). Після цього підраховується сума ймовірностей від 0 до i—1 і переводиться в двійкову форму. Потім дробова частина усікається зліва до li знаків.

ai p (ai) li Сума pnвід n=0 до i—1 Сума за p(aibin підсумковий 

код

1 0.36 2 0.0 0.0000 00
2 0.18 3 0.36 0.0100 010
3 0.18 3 0.54 0.1000 100
4 0.12 4 0.72 0.1011 1011
5 0.09 4 0.84 0.1101 1101
6 0.07 4 0.93 0.1110 1110

Примітки

Шаблон:Примітки Шаблон:Методи стиснення даних Шаблон:Алгоритм-доробити