Другие языки программирования и технологии
Метод Хаффмана
Объясните пожалуйста в чем заключается смысл метода Хаффмана, и если можно приведите небольшой пример в двух словах. Заранее благодарен. (Да, чуть не забыл, я гуглил).
Принцип кодирования по Хаффману
Сжатие данных производится в два этапа. На первом этапе считываются данные, которые должны подвергнуться сжатию; на втором определяется частота встречаемости отдельных байтов данных, которые могут принимать значения от 0 до 255.
Рассмотрим пример. Пусть требуется сжать словосочетание:
ПРОГРАММИРОВАНИЕ КОМПРЕССИИ БЕЗ ПОТЕРЬ
До сжатия данных каждая буква представляется числом, которое лежит между 0 и 255. Если применяется так называемая альтернативная кодовая таблица (содержащая знаки русского алфавита) , то буквы имеют значения между 128 и 159 (а-я) , между 160 и 175 (а-п) и между 224 и 239 (Р-я) , а пробел - значение 32. Запись приведенного словосочетания потребовала бы 38 байт - по одному байту на букву или пробел. Чтобы снизить размеры файла при записи, определим вначале частоту встречаемости отдельных букв:
Сжатие данных производится в два этапа. На первом этапе считываются данные, которые должны подвергнуться сжатию; на втором определяется частота встречаемости отдельных байтов данных, которые могут принимать значения от 0 до 255.
Рассмотрим пример. Пусть требуется сжать словосочетание:
ПРОГРАММИРОВАНИЕ КОМПРЕССИИ БЕЗ ПОТЕРЬ
До сжатия данных каждая буква представляется числом, которое лежит между 0 и 255. Если применяется так называемая альтернативная кодовая таблица (содержащая знаки русского алфавита) , то буквы имеют значения между 128 и 159 (а-я) , между 160 и 175 (а-п) и между 224 и 239 (Р-я) , а пробел - значение 32. Запись приведенного словосочетания потребовала бы 38 байт - по одному байту на букву или пробел. Чтобы снизить размеры файла при записи, определим вначале частоту встречаемости отдельных букв:
Считаете частоту появления букв, потом сортируете их (частоту) по возрастанию.
Потом строите дерево - берете две самые редкие буквы, обьединяете в узел двоичного дерева и присваеваете ему суммарный вес, вставляете его обратно. Продолжаете пока не останется только один узел. Обходите Все дерево и для каждого листа-буквы строите код хаффмана (из нулей-лево и единиц-право) . Записываете на выход дерево, и по битам читаете входной файл и пишете на выход строки из 0 и 1, которые посчитали на предыдущем шаге.
Потом строите дерево - берете две самые редкие буквы, обьединяете в узел двоичного дерева и присваеваете ему суммарный вес, вставляете его обратно. Продолжаете пока не останется только один узел. Обходите Все дерево и для каждого листа-буквы строите код хаффмана (из нулей-лево и единиц-право) . Записываете на выход дерево, и по битам читаете входной файл и пишете на выход строки из 0 и 1, которые посчитали на предыдущем шаге.
плохо гуглил, вот
Арслан Ишбулатов
мужик, спасибо конечно, но эта страница у меня в закладках
Mc Jum@
А толку? Что она у тебя в закладках? Так и будет лежать до скончания века?! "Можно подтащить ишака к реке. Но даже шайтан не заставит его пить, если он не хочет". Ходжа Насреддин.
смысл алгоритма в том, что наиболее часто встречающиеся байты кодируются меньшим числом бит
Похожие вопросы
- алгоритм Хаффмана и Арифметического кодирования
- Виртуальные методы и функции
- Как использовать значение переменной как ИМЯ переменой или метода,,,? С#
- Приведите, пожалуйста, пример ( адекватный для новичка ) использования методов одного класса в методах другого С++
- Java, получение названий методов и вызов методов по имени
- Паскаль метод Якоби.
- Сортировка методом пузырька. Си.
- Вопрос по программированию в 1с ( метод регистра сведений )
- Метод класса с++
- C++ расчет площади методом монте-карло