Смекни!
smekni.com

Компрессия информации и упорядочение дерева по алгоритму Виттера (стр. 3 из 4)


11 12

o l


7 8 9 10

e h


3 4 5 6

* w

1 2


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

Итерация №9
Сообщение: Hello_ wor
Закодировнное сообщение:01101000 001100101 1001101100 01 110 01101111 100 00100000 01001110111 111 1110 01110010

15


o 13 14


9 10 11 12

h w e - l

3 4 5 6 7 8

* 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

ПРИЛОЖЕНИЕ В

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

unitForm;

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