Форум программистов, компьютерный форум CyberForum.ru

Арифметическое кодирование - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
ZigaZaga
0 / 0 / 0
Регистрация: 06.01.2010
Сообщений: 20
05.03.2010, 14:27     Арифметическое кодирование #1
Добрый день. задали мне лабу: реализовать арифметическое кодирование.
но мне не всё понятно в реализации...
Надо ли разбивать на блоки и каждый отдельный блок кодировать своим float (double?). , или же кодируеться весь файл, чем-то одним и большим, что потом можно интерпретировать как дробное число?

примеры не нужны, достаточно совета.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2010, 14:27     Арифметическое кодирование
Посмотрите здесь:

C++ шифрование и кодирование
C++ кодирование текста
Арифметическое кодирование C++
C++ Кодирование, C++
C++ Кодирование
Арифметическое кодирование на С++ C++
Кодирование и декодирование C++
C++ Найти среднее арифметическое квадратов и среднее арифметическое абсолютных значений двух вещественных чисел

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
05.03.2010, 21:21     Арифметическое кодирование #2
Арифметическое кодирование лучше делать целочисленным. Разбиение на блоки зависит исключительно от природы файла - это кодирование вплотную приближается к шенноновской мере информации для независимых символов. Если у тебя в разных блоках получаются сильно различающиеся таблицы частот - велкам, кодируй блоками. Если содержимое файла равномерное, смысла в блоках нет.
Принцип такой: ты ведёшь границы, между которыми находится искомое число. Допустим, unsigned int. Нижняя изначально заполняется нулевыми битами, верхняя - единичными. При поступлении очередного символа ты изменяешь границы в зависимости от его частотного интервала (думаю, принцип ты понимаешь, если нет - спроси отдельно). Все совпавшие старшие биты границ отправляем в итоговый файл, потому что они уже не изменятся в ходе дальнейших вычислений. Ты выкидываешь при помощи сдвига эти биты из границ, а вновь образовавшиеся младшие биты заполняешь нулями для нижней и единицами для верхней границы. Таким образом, оказывается достаточно всего лишь пары unsigned int для того, чтобы пропустить сквозь них файл любой длины.
Yandex
Объявления
05.03.2010, 21:21     Арифметическое кодирование
Ответ Создать тему
Опции темы

Текущее время: 12:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru