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