Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ч4Теория_Кодирования.DOC
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
373.76 Кб
Скачать

Префиксные коды.

Рассмотренный выше код, казалось бы, можно было бы оптимизировать, например, присвоить командам коды, представленные в таблице 3.4.

K1

K2

K3

K4

0

1

11

111

Таблица 3.4

Да, мы имеем в этом случае различные по значению коды, и кажется, что мы получили более экономный код. Но, давайте посмотрим, что будет в этом случае. Запишем следующую последовательность команд.

K1, K4, K3, K4, K1, K1, K2, K1, ……

Закодированные команды будут выглядеть следующим образом:

01111111110010

Легко видеть, что произойдет, если мы попытаемся однозначно дешифрировать это код в команды. Путаница начинается со второго бита, так это может быть и команда K2, и команда K3 , и команда K4.

Посмотрим на частоту использования букв русского языка и ограничим их количество до 32 букв, считая, что буквы «е», «ё», это одна буква.

Буква

Частота

Примечание

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

А

Б

В

Г

Д

Е

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Щ

Ы

Ь

Ъ

Э

Ю

Я

0,062

0,014

0,038

0,013

0,025

0,072

0,007

0,016

0,062

0,010

0,028

0,035

0,026

0,053

0,090

0,023

0,040

0,045

0,053

0,021

0,002

0,009

0,004

0,012

0,006

0,003

0,016

0,014

0,014

0,003

0,006

0,018

3

19

9

22

13

2

26

17

4

24

11

10

12

5

1

14

8

7

6

15

32

25

29

23

27

30

18

20

21

31

28

16

Частотный анализ

Передача информации с закрытым и открытым ключом

Часть 2.

Экономная передача информации

Код Фано

Сравнение эффективности обычной и экономной передачи информации

Свойства префиксных кодов

3.Сжатие на базе экономного кода.

Двоичного кодирования достаточно для кодирования любой информации и двоичное представление в памяти не вызывает удивления, хотя хранит любую мыслимую информацию и в разных структурах. При этом единица кодированной информации имеет, как правило, фиксированную длину, что не всегда оправдано и выгодно. Для кодирования букв русского языка было бы достаточно 5 разрядов (объединив е и ё). Но мы используем 8 разрядов

Представим себе, что передается информация на управление Марсоходом и используется всего 4 команды:

К1 – команда вперед

К2 – команда влево

К3 – команда вправо

К4 – команда назад.

Для кодирования 4 команд требуется 2 разряда и может показаться, что это вполне оптимально.

Закодируем каждую из них, на что потребуется два двоичных кода:

К1

К2

К3

К4

00

01

10

11

50%

25%

12,5%

12,5%

500

250

125

125

Таблица 3.1

В процессе передачи выяснилось, что половина команд, т.е. 50 - это команды вперед, следующая по частоте команда назад, а остальные команда налево и направо примерно поровну составляют оставшуюся часть, около 25%. Тогда была поставлена задача, перепрограммировать робот и подавать команды управления в экономном режиме.

Рассуждение ведется следующим образом: Разобьем все сообщения на две группы с учетом частоты передаваемых команд, так чтобы число сообщений передаваемых по командам на 1000 было примерно поровну, то есть: 1 - (К1) - 500 и 2 - (К2, К3, К4) - 500, первой присвоим 0, второй – 1.(таблица 3.2). Точно также рассуждаем для второй итерации: 1 - (К2) 250 и 2 - (К3, К4) 250, первой присвоим 0, второй -1. И наконец, для третьей итерации: 1 - (К3) - 125 и 2 - (К4) - 125, первой присвоим 0, второй -1. Результаты такого разбиения хорошо видны в таблице 3.2

К1

50%

0

К2

25%

1

0

К3

12,5%

1

0

К4

12,5%

1

Таблица 3.2

В результате получим неравномерный код команд и вместо таблицы 3.1, таблицу 3.3, где в строке 2 указаны соответствующие коды..

К1

К2

К3

К4

0

10

110

111

50%

25%

12,5%

12,5%

500

250

125

125

Таблица 3.3

Теперь очевидно, что для передачи в первом варианте при наличии 2 разрядов для каждой команды потребуется 2000 бит. А для второго варианта потребуется 500*1= 500 бит для первой команды, 250*2= 500 бит для второй команды и (125+125)*3= 750 бит для 3 и 4 команд. Таким образом, это составит 1750 вместо 2000 бит информации.

Отсюда видно, что показателем эффективности неравномерного кода является не длины отдельных команд, а среднее количество информации, которое может быть передано с учетом частоты встречаемости команд. Значение практических результатов будет близко к этим показателям. Частоту встречаемости можно рассматривать как вероятность появления соответствующей команды в сообщении.

Если £ сред – средняя длина кодового сообщения ( набора команд ),

а li - длина кода единичного сообщения (команды), P(ki) – вероятность появления сообщения (команды) длины li , а N – общее число сообщений(команд), то формула, определяющая среднюю длину одного сообщения( команды), будет выглядеть следующим образом:

N

£ сред = ∑ li P(ki).

i =1

Наиболее экономным будет код, средняя длина которого будет минимальной. Для данного примера

£ сред = 1*0,5 + 2*0,25+3*2*0,125 = 1,75

Очевидно, что для равномерного кода £ сред = 2,00.

Рассмотренный выше способ формирования кода был предложен американским математиком Фано.

Общий алгоритм получения кода Фано будет состоять в следующем.

Расположим вероятности появления сообщений в порядке их убывания. Далее разбиваем их на две группы по приблизительному равенству суммы вероятностей, не меняя их последовательности. В первой группе, как правило, будет оказываться меньшее число, по отношению ко второй группе. Первой группе относительно данного разбиения присваиваем – 0, а второй группе присваиваем – 1. Группы первую и вторую разбиваем на две части до тех пор, пока в группе не останется только одна вероятность. Для нее процесс получения кода закончен. Далее такие действия предпринимаем для оставшихся групп, пока дальнейшее разбиение будет невозможным. Лучше всего такое разбиение оформлять в виде таблицы подобной таблице 3.2. Тогда код для соответствующего сообщения (команды) будет складываться из значений находящихся в колонках слева направо, до завершения их появления.

Общий алгоритм для k- значного кода ……