Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
fkit_kki_dtik_ksm_LEK.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.18 Mб
Скачать

3. Алгоритм Шенона—Фано для побудови економного коду

На основі першої теореми Шенона (основної теореми про кодування) логічно виникає питання про побудову такого нерівномірного коду, в якому елементам повідомлення, що трапляються часто, присвоюються більш короткі кодові слова (кодові комбінації), а тим, що трапляються рідше – довші.

Першим, хто це зробив, виходячи з досвіду, був Морзе. Розповідають, що, створюючи свій код, Морзе ходив у найближчу типографію і підраховував число літер у набраних касах. Буквам і знакам, яких у цих касах було заготовлено більше, він зіставляв більш короткі кодові слова (адже ці букви трапляються частіше). Наприклад, в українському варіанті азбуки Морзе буква «Е» передається однією крапкою, а буква «Ш» — чотирма тире.

Ідею Морзе використали сучасні творці нерівномірних кодів, зокрема Шенон, Фано та Хаффмен. Методи побудови нерівномірних кодів уперше запропонували незалежно один від одного Роберт Фано та Клод Шенон.

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

Алгоритм кодування за методом Шенона—Фано

  1. Алфавіт джерела повідомлення (букви) упорядковують у послідовності спадання їх ймовірності.

  2. Одержаний список ділять на дві послідовні частини так, щоб суми ймовірностей букв мало відрізнялися одна від одної. Буквам з першої частини приписується символ 0, а буквам другої частини — символ 1. Аналогічна ситуація з кожною з одержаних частин, якщо вони містять принаймні дві букви.

  3. Поділ таким чином триває доти, доки весь список не буде поділено на частини, що містять по одній букві.

  4. Після закінчення такого поділу кожній букві (елементу повідомлення) ставиться у відповідність послідовність символів (нулів та одиниць), приписаних у результаті цього процесу для кожної букви.

  5. Одержані двійкові послідовності приймають за шукані кодові слова (кодові комбінації)

Приклад. Абстрактний алфавіт з ймовірностями появи його букв у тексті, подано матрицею:

Побудувати відповідний йому код Шенона —Фано.

Процес побудови коду подано у таблиці 6.

Т

Згідно з даними таблиці одержуємо:

а1 (111)

а2 (01)

а3 (00)

а4 (110)

а5 (10)

аблиця 6

а3 – 0.25

а2 – 0.24

0

0

1

а5 – 0.23

а4 – 0.15

а1 – 0.13

1

0

1

0

1

Процес побудови цього коду можна подати в вигляді кодового дерева

У даному випадку:

1) ентропія джерела

2) надлишковість джерела

3) середнє число символів в коді

Середнє число символів у коді називають ще коефіцієнтом економічності, або коефіцієнтом ефективності коду.

4) надлишковість коду

Отже, для коду Шенона—Фано середня кількість двійкових символів, що припадає на символ джерела, наближається до ентропії джерела, але не дорівнює їй.

Цей підтверджений прикладом результат є наслідком теореми кодування без перешкод (шуму) для джерела (першоа теорема Шенона).

Обчислимо за співвідношенням (3.7) значення вектора Крафта

Отже, даний конкретний код є оптимальним.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]