📄 chenchen.m
字号:
%Homework 1
%By Chen Chen (PID:001084988)
%Function:Create a binary Huffman coding for a given text and decode it
%Calculate the Lavg and H
clc;
clear all;
Probability=[0.0761;0.0154;0.0311;0.0395;0.1262;0.0234;0.0195;0.0551;0.0734;
0.0015;0.0065;0.0411;0.0254;0.0711;0.0765;0.0203;0.0010;0.0615;
0.0650;0.0933;0.0272;0.0099;0.0189;0.0019;0.0172;0.0009;0.1200;0.0300];
symbols=['a';'b';'c';'d';'e';'f';'g';'h';'i';'j';'k';'l';'m';'n';'o';'p';
'q';'r';'s';'t';'u';'v';'w';'x';'y';'z';' ';'-'];
new_Probability=Probability/sum(Probability);
Prob=new_Probability;
pointer=length(new_Probability);
addrss=[];
codes=['0';'1'];
[sorted_prob,index]=sort(Prob);
number=length(new_Probability);
while number~=1
add=sum(sorted_prob(1:2));
pointer= pointer+1;
addrss(pointer-28,1:2)=index(1:2)';
Prob=[];
newindex=[];
if length(sorted_prob)>2
for i=3:length(sorted_prob);
Prob=[Prob;sorted_prob(i)];
newindex=[newindex;index(i)];
end;
end;
Prob=[Prob;add];
newindex=[newindex;pointer];
sorted_prob=[];
[sorted_prob,index_final]=sort(Prob);
index=newindex(index_final);
number=length(Prob);
end;
%**************************************************************************************************
n=length(new_Probability);
[p,q]=size(addrss);
L=p*q;
sequence_1 = reshape(addrss',1,L);
sequence = sequence_1';
code={};
code{sequence(L)}='0';
code{sequence(L-1)}='1';
for i=p-1:-1:1
code{sequence(i*2)}=cat(2,code{i+n},'0');
code{sequence(i*2-1)}=cat(2,code{i+n},'1');
end;
fid=fopen('test.txt','r');
readtext=fread(fid);
readtext_1=setstr(readtext');
fclose(fid);
x=char(readtext_1);
encoded='';
for i=1:length(readtext_1);
nextcode=code{compare(x(i),symbols,Probability)};
encoded=cat(2,encoded,nextcode);
end;
fileWrite = fopen('encoded.txt','w');
fprintf(fileWrite,'%c',encoded);
fclose(fileWrite);
Lavg=0;
H=0;
for i=1:28;
x=char(code(i))
L(i)=length(x);
Lavg=Lavg+(Probability(i)*L(i));
if Probability(i)~=0;
H=H+(Probability(i)*log2(1/Probability(i)));
end
end
Lavg
H
fid=fopen('encoded.txt','r');
readtext=fread(fid);
readtext_1=setstr(readtext');
fclose(fid);
x=char(readtext_1);
decoded_file='';
coded_file=x(1);
for i=1:length(readtext_1);
match=0;
for j=1:length(Probability);
M=char(coded_file);
N=char(code(j));
if length(M)==length(N);
if M==N;
decoded_file=cat(2,decoded_file,symbols(j));
match=1;
break;
end;
end;
end;
if match~=1;
coded_file=cat(2,coded_file,x(i+1));
else
if i~=length(readtext)
coded_file=x(i+1);
end;
end;
end;
fid=fopen('decoded.txt','w');
fwrite(fid,decoded_file);
fclose(fid);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -