Advertisement

【老生谈算法】matlab实现Huffman编码源码——Huffman编码

阅读量:

MATLAB实现Huffman编码程序源码


1、文档下载:

本算法已经整理成文档如下,有需要的朋友可以点击进行下载

序号 文档(点击下载)
本项目文档 【老生谈算法】MATLAB实现Huffman编码程序源码.docx

2、算法详解:

复制代码
    %霍夫曼编码
    clc;
    clear;
    u=[0.4,0.2,0.1,0.1,0.1,0.05,0.05];
    [u,k]=sort(u);
    k=fliplr(k);
    a=fliplr(u);
    [m,n]=size(u);
    B=zeros(n,n-1);%空的编码表(矩阵)
    for i=1:n
       B(i,1)=a(i);
    end
    for j=1:n-2
    tmp=B(n-j+1,j)+B(n-j,j);
    a(n-j+1)=0;
    a(n-j)=tmp;
    a=fliplr(sort(a));
    
    for i=1:n
        B(i,j+1)=a(i);
    end
    %查找合并后概率位置
    r=find(a==tmp);
    B(n,j+1)=r(end);%必须要加上end,保证排序。
    end
    index=cell(n,n-1);
    index{1,n-1}='0';
    index{2,n-1}='1';
    t=2;
    for t=2:n-1
    %给倒数第t列元素编码
    index{ t,n-t }=[index{ B(n,n-t+1) ,n-t+1},'0'];
    index{t+1,n-t}=[index{ B(n,n-t+1),n-t+1 },'1'];
    
    
    if(B(n,n-t+1)==1)
        for j=1:t-1
            index{j,n-t}=index{j+1,n-t+1};
        end
    else   
        for j=1: B( n,n-t+1 ) - 1
            index{ j, n-t}=index{ j, n-t+1};
        end
         for j=B(n,n-t+1):t-1
            index{ j, n-t}=index{ j+1 , n-t+1 };
         end
    end
    end
    
    for i=1:n
    len(i)=length(index{i,1});
    end
    u=fliplr(u);
    avlen=sum(len.*u)%平均码长 
    H=sum(-u.*log2(u) )
    P=H/avlen

全部评论 (0)

还没有任何评论哟~