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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.80
alex_RsB
3 / 3 / 1
Регистрация: 22.09.2009
Сообщений: 89
#1

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

28.02.2011, 13:06. Просмотров 3267. Ответов 2
Метки нет (Все метки)

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

C++ шифрование и кодирование
C++ Арифметическое кодирование
кодирование хаффмана C++
C++ Кодирование, C++
Кодирование по Хаффману, C++ C++
C++ Кодирование
Арифметическое кодирование на С++ C++
Кодирование файла C++
Равномерное кодирование C++
C++ Кодирование Хаффмана
Кодирование Хаффмана C++
Равномерное кодирование C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт С++
8282 / 3501 / 143
Регистрация: 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
35 / 22 / 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     Арифметическое кодирование
Ответ Создать тему
Опции темы

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