Результат тестирования программы.
Анализ работы алгоритма LZ77 и выводы
Рис. 6.1. График зависимости количества сравнений от количества элементов
Из данного графика видно, что увеличение количества элементов ведет к увеличению количества сравнений. Количество сравнений можно посчитать по формуле
, где n - количество элементов.
В результате проделанной работы было изучено большое количество литературы, рассмотрены несколько алгоритмов сжатия. Написана программа для сжатия данных по алгоритму Лемпела-Зива LZ77.
Список использованных источников
1. Дж. Бакнел «Фундаментальные алгоритмы и структуры данных в Delphi»- СПб: ООО «ДиаСофтЮП», 2003.-560 с.
. Д. Хопкрофт «Структуры данных и алгоритмы» Д. Хопкрофт: Уч.пос.- М.:“Вильямс”, 2000.
. Н.Вирт «Алгоритмы и структуры данных.» Н.Вирт.М.: Мир, 1989.,87с.
. В.В.Фаронов « Delphi. Программирование на языке высокого уровня: Учебник для вузов» В.В.Фаронов.: Питер,2009
. Д. Райли «Абстракция и структуры данных». Вводный курс. Д. Райли - М.: Мир, 1993 г.
Приложение
unitUmain;,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,,StdCtrls,ComCtrls,ExtDlgs;=class(TForm):TButton;:TEdit;:TListBox;:TListBox;:TListBox;:TEdit;:TEdit;:TUpDown;:TUpDown;:TButton;:TButton;:TMemo;:TButton;:TButton;Click(Sender:TObject);Click(Sender:TObject);Click(Sender:TObject);Click(Sender:TObject);Click(Sender:TObject);
{Privatedeclarations}
{Publicdeclarations};:TForm1;,st,slov,buff:string;,sizebf,sizesl,ind,shft:integer;
{$R*.dfm}.Button1Click(Sender:TObject);,temp:integer;:string;(x,y:string):byte;//определяемдлинусовпадения,j,k:integer;:=pos(y[1],x);:=1;:=2;:=ktosizebfdo[i]=y[j+1]then(j);(result);;(result);;(varx,y:string;n:integer);//заполняемсловарьснова,j,delta:integer;+length(x)<=sizeslthen//есливловарьможнодописатьтопишем12345придлине7->1234567:=1tondo:=x+y[i]:=n+length(x)-sizesl;//определяемсколькосимволоввыталкиваем:=1tosizesl-deltado[i]:=x[i+delta];//передвигаемвсебуквынадлинусмещения12345сосдвигом2-->345:=1;:=length(x)-delta+1tosizesldo
begin[i]:=y[j];//дописываемизбуфера
inc(j);;;
//;(varx:string;m:integer);,j:integer;:=1tolength(x)-mdo
x[i]:=x[i+m];//выталкиваемпроверенныебуквы:=length(x);(x,j-m);//устанавливаемновуюдлину
i:=length(x)+1;(i<=sizebf)and(ind<length(st))do
begin//еслистроканезакончиласьибуфернеполон
x:=x+st[ind+1];
inc(i);inc(ind);;
//;.Clear;.Clear;.Clear;:=Str.Text;:=StrToInt(Edit1.Text);:=StrToInt(Edit2.Text);:='';:='';:=1;:=1tosizebfdo:=buff+st[i];:=sizebf;.Items.Add(buff);.Items.Add(slov);<>''do(slov='')or((ind=length(st))and(length(buff)=1))then//еслипоследняябукваилисловарьещепуст:=slov+buff[1];.Items.Add('<'+'0'+','+'0'+','+buff[1]+'>');(buff,1);(buff[1],slov)<>0then:=pos(buff[1],slov)-length(slov);;:=GetCount(buff,slov);:=buff[shft];(slov,buff,shft);(buff,shft);.Items.Add('<'+inttostr(sizesl+temp)+','+inttostr(shft-1)+','+s+'>');(slov,buff,1);.Items.Add('<'+'0'+','+'0'+','+buff[1]+'>');(buff,1);;;:=0;<>''then.Items.Add(buff);.Items.Add(slov);;;('Готово!');;.Button2Click(Sender:TObject);.text:='';.items.clear;.Items.Clear;.Items.Clear;;.Button4Click(Sender:TObject);;;.Button3Click(Sender:TObject);:TOpenDialog;:TextFile;,s:string;.Clear;.Lines.Add('');:=TOpenDialog.Create(self);.InitialDir:=GetCurrentDir;
//Тольк оразрешенные существующие файлымогут быть выбраны
openDialog.Options:=[ofFileMustExist];
//Разрешеновыбратьтолько.txtфайлы.Filter:=
'TextFiles|*.txt';
//Показдиалоготкрытияфайла.Execute('File:'+openDialog.FileName);:=openDialog.FileName;(Tekst,FilePass);(Tekst);(Tekst)do(Tekst,s);.Lines.Add(s);;.Lines.Delete(0);
elseShowMessage('Открытие файла остановлено');
Str.Text:=memo1.Text;;.Button5Click(Sender:TObject);:TSaveDialog;:=TSaveDialog.Create(self);.InitialDir:=GetCurrentDir;.Options:=[ofFileMustExist];.Filter:='TextFiles|*.txt';.Execute.Items.SaveToFile(SaveDialog.FileName+'.txt');('File:'+SaveDialog.FileName);('Сохранение файла остановлено');;.