2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Вопрос по коду Шеннона-Фэно
Сообщение29.09.2006, 16:12 
Аватара пользователя
Из учебника по теорверу я так понял алгоритм кодирования (будем для простоты говорить о побуквенном кодировании).

- берём весь алфавит и сортируем по вероятностям встречания букв
- где-то не посередине алфавит разбиваем на две группы так, чтобы суммарные вероятности букв до и после раздела примерно совпадали (и были близки к 1/2)
- договариваемся, что первый бит кода указывает, в какой из этих двух групп находится буква
- далее, каждую группу разбиваем на подгруппы по тому же принципу и договариваемся, что каждый очередной бит выбирает из двух очередных подгрупп одну из двух равновероятных
- по теории информации доказывается, что таким образом, информация, приходящаяся на каждый бит максимальна, а сам код -- оптимален
- параллельно показывается, что для редких букв код оказывается длиннее, а для частых короче -- что является наглядным доказательством оптимальности

Вопросы.

1. Не это ли самое называется кодом Хафмана? Не тоже ли это самое?

2. Изменим алгоритм.

Будем сортировать буквы, но записывать их в две колонки, например

ое
аи
тн
ср

и так далее.

При разбивке будем получать группы путём разбиения получающейся таблицы по вертикали, на два столбца.

Ясно, что вероятности этих групп тоже будут примерно одинаковыми (не теряя сути рассуждений предположим, что вероятности соседних букв отличаются слабо). То есть, по теории информации, каждый бит снова будет выбирать между двумя равновероятными группами. И тоже, стало быть, должен оказаться оптимальным. Однако, поскольку теперь в каждой группе примерно по одинаковому числу букв, то коды всех букв будут иметь примерно одинаковую длину и уже нельзя будет объяснить, что код оптимален потому, что короче для более частых букв.

Где я ошибся?

 
 
 
 
Сообщение29.09.2006, 17:45 
Аватара пользователя
Оптимальный код (код Хаффмана) получается не так. Вы должны взять два сообщения с минимальными вероятностями и объединить их в одно сообщение, вероятность которого равна сумме. Далее по индукции стоите для этой системы оптимальный код (т.е. также объединяете буквы... пока не получится всего два сообщения, которым сопоставляется 0 и 1). На обратном ходе вы на каждом шаге разделяете то сообщение, которое было объединено, а из соответствующего слова делате два, приписывая в конец 0 и 1.

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

 
 
 
 
Сообщение29.09.2006, 22:12 
Аватара пользователя
Вы имеете в виду, что в коде Хафмана берутся не отдельные символы, а цепочки?

А по второму вопросу? :)

 
 
 
 
Сообщение29.09.2006, 23:15 
Аватара пользователя
Dims писал(а):
Вы имеете в виду, что в коде Хафмана берутся не отдельные символы, а цепочки?


Нет, почему, кодовые слова приписываются отдельным символам. Просто для этого они объединяются в группы, а потом обратно разъединяются.

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group