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

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

Войти
Регистрация
Восстановить пароль
 
ZigaZaga
0 / 0 / 0
Регистрация: 06.01.2010
Сообщений: 20
#1

Арифметическое кодирование: верхняя и нижняя границы сошлись - C++

24.03.2010, 20:26. Просмотров 707. Ответов 0
Метки нет (Все метки)

ну не совсем сошлись..
Что делать если верхняя и нижняя грарицы отличаються на 1?(происходить зацикливание)

в статье Мастрюкова нашёл такое:
"Сделаем следующее: удалим вторые по значи¬мости цифры границ и ос¬тальные менее значимые сдвинем влево по описанным правилам. Старшие цифры останутся на месте. Затем увеличим специальный счетчик, чтобы запомнить то, что мы выбросили цифры.
Будем продолжать те же действия до тех пор, пока старшие цифры границ не совпадут. Затем в код сооб¬щения помещается совпавшая старшая цифра, а за ней равное счетчику количество девяток или нулей, в зависимости от того, к цифре верхней или нижней границы сошлись старшие цифры."

но мне не понятно как это реализовать, в том плане, что в статье речь идет о десятичных цифрах, а у меня же только биты. В смысле как я запишу девятки и нули? как вообще можно записать ДЕВЯТКУ?
буду рад любой ссылоке.
вот мой код без комментариев. хотя слова МОЙ и КОД тут не сильно уместны)) :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
while(file.read((char *)&ch, sizeof(ch)))
{
    h = diapason[(unsigned char )ch];
    if((unsigned char)ch == 0)
        l = 0;
    else
        l = diapason[(unsigned char )ch - 1];
    LL = L;
    HH = H;
    L = LL + l * (HH - LL + 1) / delitel;
    H = LL + h * (HH - LL + 1) / delitel - 1;
    for(;;)
    {
        if(H < half)
            BitsToStream(false, bittoflow, arch);
        else if(L >= half)
        {
            BitsToStream(true, bittoflow, arch);
            L -= half;
            H -= half;
        }
        else if((L >= firstQTR)&&(H < thirdQTR))
        {
            bittoflow++;
            L -= firstQTR;
            H -= firstQTR;
        }
        else break;
        L = 2 * L;
        H +=  H + 1;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2010, 20:26     Арифметическое кодирование: верхняя и нижняя границы сошлись
Посмотрите здесь:

C++ шифрование и кодирование
C++ Арифметическое кодирование
Арифметическое кодирование C++
C++ Даны числа x, y, x1, y1, x2, y2. Проверить истинность высказывания: «Точка с координатами (x, y) лежит внутри прямоугольника, левая верхняя вершина ко
C++ Кодирование, C++
C++ Верхняя и нижняя граница типов
C++ Кодирование
Арифметическое кодирование на С++ C++
Кодирование файла C++
Равномерное кодирование C++
C++ Кодирование Хаффмана
C++ Разное количество итераций циклов, где верхняя граница одного - int, второго - char

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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