- •1. Перевод чисел из одной системы счисления в другую
- •1.1. Правила перевода целых чисел
- •1.2. Правила перевода правильных дробей
- •1.2.1. Перевод из десятичной системы счисления – в двоичную и шестнадцатеричную:
- •0,1101 – Результирующее число.
- •1.3. Правило перевода дробных чисел
- •2. Построение прямых кодов и кодирование дискретного сигнала
- •3. Построение кодов с учетом частоты символов и кодирование дискретного сигнала
- •4. Построение кода Грея и кодирование дискретного сигнала
- •5. Криптографическое кодирование дискретного сигнала методом простой подстановки
- •6. Криптографическое кодирование дискретного сигнала методом Виженера
- •7. Построение эффективных кодов методом Шеннона-Фано и кодирование дискретного сигнала
- •8. Построение эффективных кодов методом Хаффмена и кодирование дискретного сигнала
- •9. Измерение дискретного сигнала
- •10. Сложение вещественных чисел в обратных кодах
- •Нормализация
- •Размещение в разрядных сетках
- •11. Сложение вещественных чисел в дополнительных кодах
7. Построение эффективных кодов методом Шеннона-Фано и кодирование дискретного сигнала
Задание к работе: выполнить кодирование исходного текста методом Шеннона-Фано. Относительные частоты символов алфавита, из которых состоит исходный текст, рассчитать по исходному тексту.
Решение задачи
для построения эффективного кода выполним следующие шаги:
определим размер (в символах) исходного текста (переменная L) – он равен 20,
определим относительные частоты fi появления каждого символа в исходном тексте по формуле: fi = mi/L, где mi – число появлений i-го символа в исходном тексте из таблицы 3.2. Имеем графу 3 таблицы 7.1:
Таблица 7.1
Символ алфавита |
Число появлений mi |
Частота символа fi |
1 |
2 |
3 |
а |
2 |
0,1 |
в |
4 |
0,2 |
е |
2 |
0,1 |
и |
3 |
0,15 |
л |
1 |
0,05 |
н |
1 |
0,05 |
о |
1 |
0,05 |
п |
1 |
0,05 |
р |
1 |
0,05 |
с |
1 |
0,05 |
т |
1 |
0,05 |
ч |
1 |
0,05 |
ь |
1 |
0,05 |
упорядочим символы алфавита по невозрастанию частот. Получим графы 1 и 2 таблицы 7.2:
выполним последовательное деление списка символов в соответствии с алгоритмом Шеннона-Фано (графа 3 таблицы 7.2) и назначим символы 0 или 1 элементам списка символов – кодируем элементы,
«соберем» символы 0 и 1 слева направо в графе 3 для каждого символа алфавита. Получим графу 4 таблицы 7.2.
Таблица 7.2
Символ алфавита |
Частота символа fi |
Этапы деления списка символов |
Результирующие коды |
||||
1 |
2 |
3 |
4 |
||||
I |
II |
III |
IV |
V |
|||
в |
0,2 |
0 |
0 |
- |
00 |
||
и |
0,15 |
1 |
0 |
- |
010 |
||
а |
0,1 |
1 |
- |
011 |
|||
е |
0,1 |
1 |
0 |
0 |
- |
100 |
|
л |
0,05 |
1 |
0 |
- |
1010 |
||
н |
0,05 |
1 |
0 |
10110 |
|||
о |
0,05 |
1 |
10111 |
||||
п |
0,05 |
1 |
0 |
0 |
- |
1100 |
|
р |
0,05 |
1 |
0 |
11010 |
|||
с |
0,05 |
1 |
11011 |
||||
т |
0,05 |
1 |
0 |
- |
1110 |
||
ч |
0,05 |
1 |
0 |
11110 |
|||
ь |
0,05 |
1 |
11111 |
для кодирования исходного текста используем таблицу 7.2. Имеем (для простоты закодируем отдельно фамилию, имя и отчество):
петров 1100 100 1110 11010 10111 00
иван 010 00 011 10110
васильевич 00 011 11011 010 1010 11111 100 00 010 11110