Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/20: Рейтинг темы: голосов - 20, средняя оценка - 4.80
alex_RsB
3 / 3 / 1
Регистрация: 22.09.2009
Сообщений: 89
1

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

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

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

Арифметическое кодирование
Добрый день. задали мне лабу: реализовать арифметическое кодирование. но мне...

Арифметическое кодирование на С++
Здравствуйте. Такая проблема: нужно реализовать алгоритм арифметического...

Кодирование
В какой тип данных можно записывать по одному биту 0 или 1, чтобы потом можно...

Кодирование, C++
Закодировать каждую букву произвольного символьного массива равномерным кодом.

Равномерное кодирование
Задача такова: Программа должна запускаться с командной строки с темя...

2
M128K145
Эксперт JavaЭксперт С++
8326 / 3546 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
28.02.2011, 13:22 2
Лучший ответ Сообщение было отмечено alex_RsB как решение

Решение

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;
0
DANON
35 / 22 / 5
Регистрация: 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;
Вы кажется перепутали со сдвигом...
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2011, 13:48

Кодирование файла
Задача написать часть полиморфного вируса для курсовой. Т.е нужно подать нашей...

Кодирование и декодирование
Всем привет. Народ,у меня такая проблема, есть код который кодирует и...

Кодирование Хаффмана
Есть дерево Хаффана, с помощью функции, приведенной ниже прохожусь по дереву и...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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