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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Сумма элементов массива http://www.cyberforum.ru/cpp-beginners/thread249836.html
помогите плиз. Есть прога, пользователь вводит размер и элементы двух массивов после чего они сортируются и складываются. Результат должен быть третий массив. У меня почему то неправильно работает сумма: #include <cstdlib> #include <iostream> using namespace std; template < typename T> void sort(T *a, long N)//сортировка по возрастанию
C++ Переставляя строки и столбцы матрицы, добиться, чтобы наибольший элемент оказался в верхнем левом углу Дана вещественная матрица A размером 7*4. Переставляя ее строки и столбцы,добиться того,чтобы наибольший элемент (один из них) оказался в верхнем левом углу. Помогите решить на C++. http://www.cyberforum.ru/cpp-beginners/thread249823.html
C++ Массив NxN. Упорядочить столбцы по возрастанию.
Дан двумерный массив NxN. Упорядочить столбцы по возрастанию.
C++ Создание динамического массива
объясните пожалуйста вот эту часть // sozdanie dinamicheskogo massiva m*n a=(int**)malloc(m*sizeof(int *)); for(i=0;i<m;i++) { a=(int *)malloc(n*sizeof(int)); } заранее спасибо #include<stdio.h> #include<stdlib.h>
C++ Организовать выбор одной из трёх программ http://www.cyberforum.ru/cpp-beginners/thread249806.html
Создать программу с использованием меню. Вданной программе должен быть организован выбор одно из трёх программ: 1) Вычислить значение У У={a-b при b>0 {a+b при b<=0 2) Дан одномерный массив А. Найти номер последнего отрицательного элемента. 3) Дан двумерный массив размерностью NxM (N и M вводится с клавиатуры). Найти максимальный и минимальный элементы данного массива и поменять их...
C++ C++ Дан двумерный массив размерностью NxM Дан двумерный массив размерностью NxM(N и M вводятся с клавиатуры). Найти максимальный и минимальный элементы данного массива.Произвести вывод данного массива в виде матрицы. C++... подробнее

Показать сообщение отдельно
DANON
34 / 21 / 3
Регистрация: 27.06.2010
Сообщений: 86
28.02.2011, 13:48     Арифметическое кодирование
Арифметическое кодирование заключается в следующем:
Пусть тебе даны числа 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;
Вы кажется перепутали со сдвигом...
 
Текущее время: 10:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru