Компрессия информации и упорядочение дерева по алгоритму Виттера

Автор: Пользователь скрыл имя, 03 Ноября 2011 в 09:22, курсовая работа

Описание работы

Производительность существующих компьютерных сетей может быть заметно увеличена за счет повышения скорости передачи данных по каналам связи, которое обеспечивается использованием методов сжатия информации (эффективное кодирование). Для решения этой проблемы было разработано большое количество разнообразных методов кодирования информации, которые могут быть реализованы программно. Данная разработка представляет собой программный модуль, обеспечивающий комрессию и декомпрессию информации.

Содержание

Аннотация 2
Введение 4
1. Постановка задачи 5
2. Основные обозначения 6
3. Обзор и характеристика существующих методов сжатия информации, основанные на процедуре кодирования хаффмена 7
3.1. Динамическое кодирование хаффмена 7
3.2. Алгоритм динамического кодирования методом fgk 8
3.3. Алгоритм динамического кодирования виттера 9
Программная реализация 12
Руководство пользователя 13
Заключение 15
Библиографический список 16
Приложения 17

Работа содержит 1 файл

Курсовая Работа теория.docx

— 47.88 Кб (Скачать)

                                                                                                                  *                                  r       

                                                                                                                       1                          2 

      Таблица 10. Итерация№10

Итерация №10
Сообщение: Hello_ worl
Закодировнное сообщение:

01101000 001100101 1001101100 01 110 01101111 100 00100000  01001110111 111  1110 01110010 111

 

                                                                                           15 

                                        13                                                        l                               14 

                9                                            10                                      11                                           12

h                              w           e                            -                                                                                       o   

3                           4                 5                         6                   /                              7                                   8     

                                                                                                                  *                                    r 

                                                                                                                    1                                   2         

      Таблица 11. Итерация№11

Итерация  №11
Сообщение: Hello_ world
Закодировнное сообщение:

01101000 001100101 1001101100 01 110 01101111 100 00100000  01001110111 111  1110 01110010 111 1100 01100100

 
 

                                                                                               17 
 
 

                                                      15                                                                    16    

                                                                                                   l 

                          11                                            12                         13                                  14

   h                                      w                   e                                                      o              

         5                           6                   7                        8                                        9                         10    

                                                                *                                         d                 -                                        r 

                                                                      1                                2                             3                             4   

 

       ПРИЛОЖЕНИЕ В

      Текст программы

      unit Form;

      interface

      uses

      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

      StdCtrls, ExtCtrls, Core;

      type

      TForm1 = class(TForm)

      InChar: TEdit;

      Panel1: TPaintBox;

      Panel2: TPaintBox;

      Label1: TLabel;

      Label2: TLabel;

      CodeTableMemo: TMemo;

      MessageMemo: TMemo;

      Label3: TLabel;

      Label4: TLabel;

      CodedMsg: TMemo;

      Button1: TButton;

      DecodedMsg: TMemo;

      Button2: TButton;

      Label5: TLabel;

      procedure InCharKeyPress(Sender: TObject; var Key: Char);

      procedure Button1Click(Sender: TObject);

      procedure FormResize(Sender: TObject);

      procedure FormPaint(Sender: TObject);

      procedure Button2Click(Sender: TObject);

      private

      { Private declarations }

      public

      { Public declarations }

      end;

      var

      Form1: TForm1;

      Tree, DecodeTree: PTree;

      codetable: array [char] of string;

      decodetable: array [char] of string;

      procedure MakeCodeTable(Top: PTree);

      implementation

      {$R *. DFM}

      procedure DrawTree(D: TPaintBox; P: Ptree; w,h: integer);

      var

      C: TCanvas;

      procedure Draw(T: PTree; x,y,level,ofs: integer);

      begin

      if(T<>nil) then

      begin

      if(T. Left<>nil) then

      begin

      c. MoveTo(x,y);

      c. LineTo(x-(ofs div 2),y+30);

      end;

      if(T. Right<>nil) then

      begin

      c. MoveTo(x,y);

      c. LineTo(x+(ofs div 2),y+30);

      end;

      C. Ellipse(x-12,y-12,x+12,y+12);

      if t. isleaf then if t. symbol=#0 then C. TextOut(x-4,y-25,'*') else C. TextOut(x-4,y-25,t. Symbol);

      C. TextOut(x-6,y-7, inttostr(T. wiegth));

      C. TextOut(x-6,y+12, inttostr(T. number));

      Draw(T. Left,x-(ofs div 2),y+30,level+1,ofs div 2);

      Draw(T. Right,x+(ofs div 2),y+30,level+1,ofs div 2);

      end;

      end;

      begin

      C: =D. Canvas;

      C. Brush. Color: =clBtnFace;

      C. FillRect(D. ClientRect);

      Draw(P,w div 2,30,1,w div 2);

      end;

      procedure MakeDeCodeTable(Top: PTree);

      procedure CT(P: PTree; code: string);

      begin

      if P<>nil then

      begin

      if (P. Wiegth>=0) and (P. IsLeaf) then

      begin

      decodetable [P. Symbol] : =code;

      end;

      if not P. IsLeaf then

      begin

      CT(P. Left,code+'0');

      CT(P. Right,code+'1');

      end;

      end;

      end;

      begin

      CT(Top,'');

      end;

      var

      DCounter: integer;

      DString: String;

      DByte: byte;

      DB: Boolean;

      procedure AddCharToDMess(C: Char);

      var

      S: String;

      begin

      With Form1. DecodedMsg do

      begin

      S: =Text;

      Clear;

      Text: =S+C;

      end;

      end;

      procedure Decode(BIT: Char);

      var

      i,j: integer;

      c: char;

      begin

      if DB then

      begin

      if DCounter=0 then

      DCounter: =7 else

      dec(DCounter);

      DByte: =((DByte shl 1) or (byte(bit) and 1));

      if DCounter=0 then

      begin

      AddSymbol(DecodeTree,chr(DByte));

      CheckWiegth(DecodeTree);

      Enumerate(DecodeTree);

      Huffman(DecodeTree);

      Vitter(DecodeTree);

      DrawTree(Form1. Panel2,DecodeTree,Form1. Panel2. ClientWidth,500);

      MakeDeCodeTable(DecodeTree);

      AddCharToDMess(chr(DByte));

      DString: ='';

      DB: =false;

      end;

      end else

      if DecodeTree=nil then

      begin

      DB: =true;

      Decode(BIT);

      end else

      begin

      DString: =DString + Bit;

      for c: =#0 to #255 do

      begin

      if DecodeTable [c] =DString then

      begin

      if c=#0 then

      begin

      DB: =true;

      DCounter: =0;

      end else

      begin

      AddSymbol(DecodeTree,c);

      CheckWiegth(DecodeTree);

      Enumerate(DecodeTree);

Информация о работе Компрессия информации и упорядочение дерева по алгоритму Виттера