2014 dxdy logo

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

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


Правила форума


В этом разделе нельзя создавать новые темы.



Начать новую тему Ответить на тему
 
 Вопрос по коду Шеннона-Фэно
Сообщение29.09.2006, 16:12 
Заслуженный участник
Аватара пользователя


16/03/06
406
Moscow
Из учебника по теорверу я так понял алгоритм кодирования (будем для простоты говорить о побуквенном кодировании).

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

Вопросы.

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

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

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

ое
аи
тн
ср

и так далее.

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

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

Где я ошибся?

 Профиль  
                  
 
 
Сообщение29.09.2006, 17:45 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Оптимальный код (код Хаффмана) получается не так. Вы должны взять два сообщения с минимальными вероятностями и объединить их в одно сообщение, вероятность которого равна сумме. Далее по индукции стоите для этой системы оптимальный код (т.е. также объединяете буквы... пока не получится всего два сообщения, которым сопоставляется 0 и 1). На обратном ходе вы на каждом шаге разделяете то сообщение, которое было объединено, а из соответствующего слова делате два, приписывая в конец 0 и 1.

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

 Профиль  
                  
 
 
Сообщение29.09.2006, 22:12 
Заслуженный участник
Аватара пользователя


16/03/06
406
Moscow
Вы имеете в виду, что в коде Хафмана берутся не отдельные символы, а цепочки?

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

 Профиль  
                  
 
 
Сообщение29.09.2006, 23:15 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Dims писал(а):
Вы имеете в виду, что в коде Хафмана берутся не отдельные символы, а цепочки?


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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group