Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2012, 09:38   #1
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию Сжатие по Хаффману - теоретический вопрос.

Хотелось бы узнать мнение программистов по следующему вопросу:
Можно ли реализовать алгоритм сжатия Хаффмана, считая атомом (минимальной неделимой единицей информации) байт?

Под атомом подразумевается именно неделимая единица информации, а не атом в смысле Лиспа и не атомарная операция.

Для определенности будем считать, что сжимать нужно текст на естественном языке в однобайтовой кодировке (избыточность 80-85%).

Вопрос возник из теоретического спора.

Если будут наброски в коде/псевдокоде, хотелось бы видеть их в стиле Паскаль/Делфи.

PS. Не обнаружил на форуме разделав по алгоритмам либо общим вопросам программирования, поэтому с учетом последнего замечания размещаю тему здесь.
s-andriano вне форума Ответить с цитированием
Старый 05.06.2012, 13:50   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

смотрим исходный алгоритм

видим есть битовые N-граммы текста (байт, знак ASCII это просто 8 бит).
и есть битовое же дерево.

1. меняем исходную однобайтовую маркировку на маркировку N-грамм текста (N байт), чему д.б. равно N? в принципе любым >=2.
2. меняем двоичное дерево (узел - две ветви) на "байтовое" (узел - 256 ветвей).
ВСЕ! Получили теоретический алгоритм для неделимого байта.
Цитата:
Вопрос возник из теоретического спора.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 05.06.2012, 22:15   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Правильно ли я понимаю, что это будет алгоритм сжатия по Хаффману?
s-andriano вне форума Ответить с цитированием
Старый 06.06.2012, 09:52   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Правильно ли я понимаю, что это будет алгоритм сжатия по Хаффману?
если в ссылке описан именно он, то почему бы и нет.

Это действительно Хаффман, или что-то другое?
С N-граммами вопросов нет, N-грамма в разных алфавитах (бит/байт) все равно остается N-граммой. (=>Хаффман)
Весь вопрос в замене двоичного дерева на байтовое дерево.
Если после замены это останется тот же алгоритм (не реализация), то почему бы и нет.
Если же алгоритм изменится, то получаем модифицированный алгоритм.

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

Или же вы о том каков будет коэффициент сжатия при таком алгоритме?

Сжатие будет мы каждые N байт исходного файла заменяем на разное кол-во байт от 1 до log256(M) (логарифм по основанию 256 от числа различных встреченных N-грамм)
Хаффман классический 8 бит (байт) на 1 .. log2 (M) бит (М -число различных байт (битовые 8-граммы).

Можно предложить немного другую версию алгоритма (это уж точно будет модифицированный алгоритм).
1 байт длина последующей кодовой последовательности + кодовая последовательность.

если Хаффман это :
звучит так
замена N-граммы на разные по длине коды в зависимости от частоты встречаемости данной N-граммы.
то предложенный алгоритм полностью укладывается в оное!
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.06.2012 в 10:09.
evg_m вне форума Ответить с цитированием
Старый 06.06.2012, 20:27   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Спасибо.
Надо будет попробовать.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод сжатия по Хаффману (C#) adspy1989 Помощь студентам 0 13.05.2012 14:29
Архивация по Хаффману. stas45rus Помощь студентам 1 15.02.2012 17:41
Теоретический вопрос про массивы (С/С++) Sergey S Помощь студентам 0 11.01.2012 10:01
Теоретический Вопрос о поиске diliana Помощь студентам 16 13.06.2009 03:19