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

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

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

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

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

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

Арифметическое кодирование - C++
Добрый день. задали мне лабу: реализовать арифметическое кодирование. но мне не всё понятно в реализации... Надо ли разбивать на блоки...

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

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

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

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

Равномерное кодирование - C++
Задача такова: Программа должна запускаться с командной строки с темя параметрами: имя входного файла, имя выходного файла и режим работы...

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

шифрование и кодирование - C++
помогите написать програму!!!! метод шифрования LZ77

Равномерное кодирование - C++
Скажу коротко, есть задание : программа должна сжимать файлы текстовые и бинарные с помощью равномерного кодирования. И если с исходным...

Кодирование слов - C++
Здравствуйте, форумчане. Тренируюсь в с++ - пишу программу. Смысл её в кодировании в ту и в другую сторону слов, учитывая, что a-1, b-2,...

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

Кодирование информации! - C++
ПОДСКАЖИТЕ, в чем может быть ошибка! #include <iostream> #include <fstream> using namespace std; void code() { ifstream...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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;
Вы кажется перепутали со сдвигом...
Ответ Создать тему
Опции темы

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