하프만 인코딩과 하프만 트리의 실현 - Pascal 실현
2017 단어 Pascal
program Project1;
type hu=RECORD
data:char;
weight:integer;
code:string;
end;
fun=record
weight,parent,Lc,Rc:integer;
end;
Var
tree:ARRAY[1..20] of hu;
newtree:ARRAY[1..20] of fun;
i,g,max,min,j,x:integer;
a:char;
s:string;
procedure inittree();
begin
i:=0;
read(a);
while(a<>'#') do begin
if(a>='0') and (a<='9') then begin
tree[i].weight:=tree[i].weight*10+ord(a)-ord('0');
end
else begin
inc(i);
tree[i].data:=a;
end;
read(a);
end;
g:=i;
end;
function minimum(im:integer):integer;
begin
min:=max;
x:=1;
for j:=1 to im-1 do
if(min>newtree[j].weight) and (newtree[j].parent=0)then
begin
min:=newtree[j].weight;
x:=j;
end;
newtree[x].parent:=im;
minimum:=x;
end;
procedure huffman;
begin
for i:=g+1 to 2*g-1 do
begin
newtree[i].Lc:=minimum(i);
newtree[i].Rc:=minimum(i);
newtree[i].weight:=newtree[newtree[i].Lc].weight+newtree[newtree[i].Rc].weight;
end;
writeln;
end;
procedure print_pre(n:integer);
begin
write(tree[n].data);
if(tree[2*n].data<>'#')then print_pre(2*n);
if(tree[2*n+1].data<>'#')then print_pre(2*n+1);
end;
procedure println();
begin
for i:=1 to 2*g-1 do writeln(i:2,'|',newtree[i].weight:3,'|',newtree[i].parent:3,'|',newtree[i].Lc:2,'|',newtree[i].Rc:2);
end;
procedure getweight();
begin
for i:=1 to g do begin
newtree[i].weight:=tree[i].weight;
end;
end;
procedure printtree();
begin
for i:=1 to g do writeln(tree[i].data,' ',tree[i].weight);
end;
procedure MC(i:integer;x:integer);
begin
if(newtree[i].parent<>0) then begin
MC(newtree[i].parent,i);
end;
begin
if(x=newtree[i].Lc) then s:=s+'0'
else s:=s+'1';
end;
end;
begin
max:=10000;
inittree;
for j:=1 to g do tree[j].code:='';
readln;
printtree;
getweight;
huffman;
println();
readln;
for j:=1 to g do begin
s:='';
MC(j,0);
tree[j].code:=copy(s,1,length(s)-1);
end;
for j:=1 to g do writeln(tree[j].data,':',tree[j].code);
readln;
end.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Delphi의 Hello,world. (콘솔 응용 프로그램)프로그램의 이름은 HelloWorld이므로 프로젝트 소스 파일은 "HelloWorld.dpr"입니다. 콘솔 응용 프로그램은 파일 | 새로 만들기 | 기타 ...에서 콘솔 응용 프로그램을 선택하여 만들 수 있습니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.