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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.80
alex_RsB
3 / 3 / 1
Регистрация: 22.09.2009
Сообщений: 89
28.02.2011, 13:06     Арифметическое кодирование #1
Мне задали задание по арифм. кодировании. Я что-то не очень знаю что это такое и зчем его едят....
Прошу вас о помощи... Конкретнее было бы хорошо. если б вы обяснили это на пальцях и показали пример (желательно в програмном виде).
Зарание спасибо!!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2011, 13:06     Арифметическое кодирование
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
28.02.2011, 13:22     Арифметическое кодирование #2
C++
1
2
3
4
5
char str[80];
std::cin.getline(str, 80);
int i, len = strlen(str), code = 5;
for(i = 0; i < len; ++i)
    str[i] += 5;
DANON
34 / 21 / 3
Регистрация: 27.06.2010
Сообщений: 86
28.02.2011, 13:48     Арифметическое кодирование #3
Арифметическое кодирование заключается в следующем:
Пусть тебе даны числа 0, 1, 2 и распределение вероятности P(0)=2/3, P(1/6), P(2)=1/6
Берешь отрезок [0, 1]. Разбиваешь на части в соответствии с твоим распределением.
Теперь на вход подается последовательность: 0102
первая цифра 0 => выбираем отрезок первый [0, 2/3] и разбиваем его в соответствии с распределением
вторая цифра 1 => выбираем в новом отрезке второй отрезок [4/9, 5/9] и разбиваем его на части в соответствии с распределением
и так далее.

В итоге получим какой-то отрезок. [x, y]. Надо найти двоичную дробь, например 0.01101, которая имеет минимальное число цифр и принадлежит этому отрезку. Тогда ответ: 01101 (это закодированное сообщение)

Раскодирование производится в обратном порядке: дана двоичная дробь. Переводим ее в десятичную. И смотрим какому отрезку она принадлежит [0, 1]. Допустим что первому (0) [0, 2/3]. Его разбиваем в соответствии c распределением. Смотрим, какому принадлежит. Пусть второму (1).. и т.д.
Получаем последовательность номеров отрезков (отрезки нумеруем от 0) - это ответ. Как только встретится третий отрезок (номер 2) - закончили.

Подробнее на вики: http://ru.wikipedia.org/wiki/%D0%90%...BD%D0%B8%D0%B5
http://en.wikipedia.org/wiki/Arithmetic_coding

Добавлено через 11 минут
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
2
3
4
5
char str[80];
std::cin.getline(str, 80);
int i, len = strlen(str), code = 5;
for(i = 0; i < len; ++i)
    str[i] += 5;
Вы кажется перепутали со сдвигом...
Yandex
Объявления
28.02.2011, 13:48     Арифметическое кодирование
Ответ Создать тему
Опции темы

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