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

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

Восстановить пароль Регистрация
 
ZigaZaga
0 / 0 / 0
Регистрация: 06.01.2010
Сообщений: 20
24.03.2010, 20:26     Арифметическое кодирование: верхняя и нижняя границы сошлись #1
ну не совсем сошлись..
Что делать если верхняя и нижняя грарицы отличаються на 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++ Даны числа x, y, x1, y1, x2, y2. Проверить истинность высказывания: «Точка с координатами (x, y) лежит внутри прямоугольника, левая верхняя вершина ко
C++ Кодирование, C++
C++ Верхняя и нижняя граница типов
C++ Кодирование
Арифметическое кодирование на С++ C++
C++ Разное количество итераций циклов, где верхняя граница одного - int, второго - char

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

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

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