Методы арифметического кодирования информации и сравнение их коэффициентов сжатия

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

=GetBinary(r+cutoff); //получаем бинарный код числа r+с в виде

//строкиi:=1 to (b)-length(bin) do:=result+0;:=result+bin; // наращивание строки-кода;;

 

-функция декодирования GolombDecoding(name:string):string;

// name - имя файла, в котором содержится закодированная //последовательность;

//возвращаемое значение - строка-декодинг

var kol,i,M,q,b,b1,b2,cutoff:integer;

s_temp:string;:textfile;:char;(f,name); //привязка логического файла к физическому(f); // открытие файла для чтения

readln(f); // пропускаем первую строку в файле

readln(f,M); // считываем с файла число Голомба - М

b:=ceil(math.Log2(M)); //считаем параметр b

cutoff:=round(power(2,b))-M; //считаем параметр с

s_temp:=; result:=;(f,c);not(eof(f)) do //идем до конца файла:=0; c<>0 do //считываем унарный код

begin(f,c);:=kol+1;; //q

q:=kol; //по считанному унарному коду определяем частное q

s_temp:=;i:=1 to b-1 do //считывание b-1битов кода(f,c);_temp:=s_temp+c;;

b1:=BinToInt(s_temp); //считаем возможный остаток b1

read(f,c);_temp:=s_temp+c//считывание b битов кода2:=BinToInt(s_temp);// считаем возможный остаток b2

if (b2=M)or(b2-cutoff<=cutoff-1) then //проверка

//условия формирования кода остатка по методу Голомба

//в зависимости от условия остатком является либо b1, либо b2

result:=result+Code_table[q*M+b1]:=result+Code_table[q*M+b2-cutoff];(f,c);;;

closefile(f); //закрываем файл;

 

.4 Описание основных функций программы, реализующей алгоритмы кодирования с помощью чисел Фибоначчи

 

Fib_arr - массив с числами Фибоначчи, глобальная переменная.

процедура генерации чисел Фибоначчи

procedure GenerateFib(n:integer);

//n - количество генерируемых чисел

var i:integer;

begin

Fib_arr[1]:=1; //инициализация первого числа Фиб.

Fib_arr[2]:=2; //инициализация второго числа Фиб.

for i:=3 to n do_arr[i]:=Fib_arr[i-1]+Fib_arr[i-2]; //число Фиб. = сумме предыдущих двух

//чисел Фиб.

end;

 

функция кодирования одного целого положительного числа

 

function FibCodingOne(one:integer):string;

// one - число, которое надо закодировать

// возвращаемое значение - строка-код числа one

var i,kol:integer;_temp:integer;:boolean;_temp:=one;:=0;

result:=;//инициализация выходной строки

for i:=1 to FIB_MAX_LENGTH do :=result+$; // забиваем выходную строку символами $

last:=true;

//search closest Fib number (one_temp>0) do //пока число можно разложить на числа Фиб.

for i:=1 to FIB_MAX-1 do //ищем большее число Фиб.(one_temp>=Fib_arr[i])and(one_temp<Fib_arr[i+1])then //нашли его на месте i

result[i]:=1; // в i-й бит записываем 1

one_temp:=one_temp-Fib_arr[i]; // уменьшаем число на большее число Фиб.

if (last) then begin[i+1]:=1; //записываем дополнит. 1 в конце кодовой посл-ти

last:=false;

kol:=i+1;;;;(result,kol+1,length(result)-kol); // урезаем кодовую строку до

//оптимального размера

for i:=1 to length(result) do //обнуляем неединичные символы кодовой строки

if (result[i]<>1) then[i]:=0;;

 

-функция декодирования одного числа

 

function FibOneDecoding(s_tmp:string):integer;

// s_tmp - строка-код числа

// возвращаемое значение - раскодированное число

var i,kol:integer;

begin

kol:=0; // начальная инициализация числа-декодинга

for i:=1 to length(s_tmp)-1 do // проход по всем символам строки-кода

if (s_tmp[i]=1) then // нашли единичный бит

kol:=kol+ Fib_arr[i];// складываем число из чисел Фибоначчи:=kol;;

 

3.5 Описание основных функций программы, реализующей алгоритмы гамма-кодирования Элиаса

 

функция кодирования одного положительного целого числа методом гамма-кодирования Элиаса

 

function ElGammaCodingOne(one:integer):string;

// one - число, которое требуется закодировать

// возвращаемое значение - строка-гамма-код для числа one

var kol,temp,i:integer;:string;:=one;:=0;

while (temp>0)do // делим на 2 число one максимальное кол-во раз

begin

temp:=temp div 2;

kol:=kol+1; //считаем количество 2, на которые поделили число one

end;

kol:=kol-1; // kol = параметру b схемы решения

result:=;i:=1 to kol do:=result+0; //заполняем 0 унарный код

result:=result+1; //в строку-код занесен унарный код числа b

bin:=GetBinary(one mod strtoint(floattostr((power(2,kol))))); // получаем

//бинарное представление числа q схемы решения

for i:=1 to kol-length(bin) do:=result+0;one>1 then

result:=result+bin; //добавляем в гамма-код бинарное представление

//остатка q;

 

функция декодирования гамма-кода

 

function ElGammaDecoding(name:string):string;

// name - имя файла с дельта-кодом

// возвращаемое значение - раскодированная информация в виде строки

begin

assignfile(f,name); //связывание логического и физического имен файла

reset(f); //открываем файл для чтения

s_temp:=;:=;not(eof(f)) do //идем до конца файла:=0;

read(f,c);

while c<>1 do // читаем с файла символы, пока не достигнем 1

begin

read(f,c);

kol:=kol+1; // считаем количество 0 унарного кода

end;_temp:=;i:=1 to kol do //количество 0 унарного кода = кол-ву битов после 1 (f,c);_temp:=s_temp+c; //формируем бинарную строку числа q из схемы

//решения

end;

result:=result+chr(BinToInt(s_temp)+strtoint(floattostr(power(2,kol))));// //накапливаем строку-декодинг, высчитывая код посчитанного числа из //параметров q, b

end;(f); //закрываем файл;

 

.5 Описание основных функций программы, реализующей алгоритмы дельта-кодирования Элиаса

 

функция дельта-кодирования одного положительного целого числа

 

function ElDeltaCodingOne(one:integer):string;

// one - число, которое необходимо закодировать

// возвращаемое значение - строка-дельта-код числа one

var kol,temp,i:integer;:string;

begin

if one=1 then //если число one=1, то сразу определяем его дельта-код = 1

begin:=1;;;:=one;

kol:=0;

while (temp>0)do // делим на 2 число one максимальное кол-во раз

begin

temp:=temp div 2; //считаем количество 2,на которые поделили число one

kol:=kol+1;

end;

result:=ElGammaCodingOne(kol); //kol = b1 из схемы решения, ищем гамма-

//