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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
ZigaZaga
0 / 0 / 0
Регистрация: 06.01.2010
Сообщений: 20
#1

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

05.03.2010, 14:27. Просмотров 2154. Ответов 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++ Кодирование
Арифметическое кодирование на С++ C++
Равномерное кодирование C++
C++ Кодирование слов
Кодирование и декодирование C++
Равномерное кодирование C++

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

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

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