您当前的位置:matlab资源网文章中心资料 → 文章内容

哈夫曼编码的MATLAB实现(基于0、1编码)

作者:曹建宇  来源:转载http://cjy19870103.blog.163.com/blog/static/556838520084106253771/  发布时间:2008-5-12 10:04:09

哈夫曼编码的MATLAB实现(基于01编码):

clc;

clear;

A=[5,29,7,8,14,23,3,11];%原概率序列

A=fliplr(sort(A));%按降序排列

T=A;

[m,n]=size(A);

B=zeros(n,n-1);%空的编码表(矩阵)

 

for i=1:n

    B(i,1)=T(i);%生成编码表的第一列

end

 

r=B(i,1)+B(i-1,1);%最后两个元素相加

T(n-1)=r;

T(n)=0;

T=fliplr(sort(T));

t=n-1;

 

for j=2:n-1%生成编码表的其他各列

    for i=1:t

        B(i,j)=T(i);

    end

        K=find(T==r);

        B(n,j)=K(end);%从第二列开始,每列的最后一个元素记录特征元素在该列的位置

        r=(B(t-1,j)+B(t,j));%最后两个元素相加

        T(t-1)=r;

        T(t)=0;

        T=fliplr(sort(T));

        t=t-1;

end

B%输出编码表

END1=sym('[0,1]');%给最后一列的元素编码

END=END1;

t=3;

d=1;

 

for j=n-2:-1:1%从倒数第二列开始依次对各列元素编码

    for i=1:t-2

        if i>1 & B(i,j)==B(i-1,j)

            d=d+1;

        else

            d=1;

        end

        B(B(n,j+1),j+1)=-1;

        temp=B(:,j+1);

        x=find(temp==B(i,j));

        END(i)=END1(x(d));

    end

    y=B(n,j+1);

    END(t-1)=[char(END1(y)),'0'];

    END(t)=[char(END1(y)),'1'];

    t=t+1;

    END1=END;

end

    A%排序后的原概率序列

    END%编码结果

for i=1:n

    [a,b]=size(char(END(i)));

    L(i)=b;

end

avlen=sum(L.*A)%平均码长   

文章评论 (评论内容只代表网友观点,与本站立场无关!)

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 -