Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Гамма-код Элиаса - Обобщение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;
}
Просмотров: 2625
|