Методы арифметического кодирования информации и сравнение их коэффициентов сжатия
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
=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 из схемы решения, ищем гамма-
//