• 大小: 0M
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: Matlab
  • 标签: 其他  

资源简介

huffman_normal.m

资源截图

代码片段和文件信息

clear
clc
N=255;
n=1920;
m=1080;
% N=10;%小数据量测试用
% n=4;%小数据量测试用
% m=5;%小数据量测试用

%产生正态分布随机数
E1=randn(nm);
E2= mapminmax(E101);%将数据归一化0-1之间
E3=round(0+N.*E2);
data=E3;
histogram(data)%绘制数据图像
title(‘正态分布‘)

Num=2*(N+1)-1;%总节点数
P=zeros(1N+1);

for i=0:N%计算每个随机数的概率
    P(i+1)=length(find(data==i))/(n*m);
end
K=0:N;

%判断概率的合理性
if length(find(P<0))~=0
    errordlg(‘出现小于0的概率!‘)
end
if abs(sum(P)-1)>10e-10
    errordlg(‘概率不具备完备性!‘)
end
[P1index]=sort(P‘descend‘);%对概率进行降序排列
K1=K(index);%将数据按照概率的降序进行排列

%完成对所有节点的初始化

for i=1:Num
    nodes(i).parent=0;
    nodes(i).lchild=-1;
    nodes(i).rchild=-1;
    if i<=N+1
        nodes(i).weight=P1(i);
        nodes(i).data=K1(i);
    else
       nodes(i).weight=-1;
       nodes(i).data=-2; 
    end   
end
index1=[00];
Min=[00];
q=0;

%构造哈夫曼树

for i=1:N
    for k=1:2
        M=10;
        for j=1:N+1+(i-1)
             if(M>nodes(j).weight || nodes(j).weight==M)
                M=nodes(j).weight;
                index1(k)=j;
            else
                M=M;
             end
        end
        Min(k)=M;
        nodes(index1(k)).weight=10;
    end
    if(index1(1)        q=q+1;
    else
        temp=index1(1);
        index1(1)=index1(2);
        index1(2)=temp;
    end
    nodes(N+1+i).weight=Min(1)+Min(2);
    nodes(N+1+i).lchild=index1(1);
    nodes(N+1+i).rchild=index1(2);
    nodes(index1(1)).parent=N+1+i;
    nodes(index1(2)).parent=N+1+i;
end
for i=1:N+1
    code(i).data=0;
    code(i).Code=[];
end

%用来存放每个节点的编码和原始数据

for i=1:N+1
    code1(i).data=0;
    code1(i).Code=[];
    code1(i).P=[];
end

%获取每个数据的编码
for i=1:N+1
    code(i).data=nodes(i).data;
    code1(i).P=P1(i);
    j=i;
    now=N+1;
    while(nodes(j).parent~=0)
        k=nodes(j).parent;
        if(nodes(k).lchild==j)
            code(i).Code(now)=0;
        else
            code(i).Code(now)=1;
        end
        j=nodes(j).parent;
        now=now-1;
    end
    for l=now:N
        code1(i).Code(l-(now-1))=code(

评论

共有 条评论