⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chenchen.m

📁 二进制
💻 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 + -