Интернет магазин китайских планшетных компьютеров



Компьютеры - Гамма-код Элиаса - Обобщение

23 января 2011


Оглавление:
1. Гамма-код Элиаса
2. Обобщение



Гамма-кодирование не подходит для кодирования нулевых значений или отрицательных чисел. Единственный способ закодировать ноль — прибавить к нему 1 до кодирования и отнять после декодирования. Другой способ — приписать в начале любой ненулевой код с 1 , а затем кодировать ноль как простой 0. Единственный способ закодировать все целые числа — перед началом кодирования установить биекцию, отображая целые числа из в.

Пример программного кода

// Кодирование
void eliasGammaEncode
{
     IntReader intreader;
     BitWriter bitwriter;
 
     while )     
     {
      int num = intreader.getInt;
      int numberBits = log2;
 
      // поместить numberBits нулей, чтобы показать, сколько бит будут следовать
      for 
      {       
          bitwriter.putBit;
      }
 
      // скопировать битов числа
      for 
      {
          if )
              bitwriter.putBit;
          else
              bitwriter.putBit;
      }
     }
 
     intreader.close;
     bitwriter.close;
}
 
// Декодирование
void eliasGammaDecode
{
     BitReader bitreader;
     IntWriter intwriter;
 
     while )
     {
        int numberBits = 0;
 
        // продолжить чтение пока не встретится единица...
        while  == false)
        {
            numberBits++;
 
            if )
            {
                // неожиданный конец потока битов
                // аварийный выход
                // игнорируем уже прочитанные биты
                return;
            }
        }
 
        if  * BITS_PER_BYTE - 1))
        {
            // переполнение целочисленного типа
            // входной поток содержит неверные данные
            // аварийный выход
            // игнорируем уже прочитанные биты
            return;
        }
 
        int num = 1;
 
        // прочитать numberBits битов
        for 
        {
            if )
            {
                // неожиданный конец потока битов
                // аварийный выход
                // игнорируем уже прочитанные биты
                return;
            }
 
            num = num << 1;
 
            if  == true)
               num = num | 1;
        }
 
        intwriter.putInt;
     }
 
     intreader.close;
     bitwriter.close;
}


Просмотров: 2245


<<< Алгоритм сжатия PPM
Дельта-код Элиаса >>>