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

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

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

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

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

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

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

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

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

2
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 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
Привет! Вот еще темы с решениями:

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

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

Кодирование Хаффмана
Добрый вечер. Я за эту неделю малость зафлудил форум наверно. Прошу прощения...

кодирование текста
задачка такая: Написать программу,&quot;шифрующую(расшифровывающею)&quot; текст из файла...


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

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

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