基于matlab实现哈夫曼编码算法

查找使用matlab实现的Huffman算法时找了很久,所以就贴出来大家分享下

正文

新建一个脚本,里面存放存储树节点的类

classdef HuffmanpropertiesleftNode = [] %左孩子rightNode = []%右孩子probability %权重code = '' %用来存放字符串character %该节点内存的值end
end

新建脚本,通过从根节点开始,递归实现

function f = loop(tempNode,codec)
global di;
ab=0;
if ~isempty(tempNode)
codec = [codec tempNode.code];if ~isempty(tempNode.character)
disp(tempNode.character); %在界面上显示
disp(codec);  %要在界面上显示
ab=tempNode.character;di(ab).code=codec;
%disp(di(ab).code)
end
if ~isempty(tempNode.code)end
loop(tempNode.leftNode,codec);
loop(tempNode.rightNode,codec);
end
f=di;
end

调用的主函数

clc;
clear all;
close all;
a = [0.1 0.1 0.2 0.2 0.4];
b = ['a' 'b' 'c' 'd' 'e'];
% Empty Array of Object Huffman
thearray = Huffman.empty(256,0);% Assign Initial Values
for i=1:length(a)thearray(i).probability = a(i);thearray(i).character = b(i);
endtemparray = thearray;% Create the Binary Tree
for k = 1:size(temparray,2)-1% First Sort the temp arrayfor i=1:size(temparray,2)for j = 1:size(temparray,2)-1if (temparray(j).probability > temparray(j+1).probability)tempnode = temparray(j);temparray(j) = temparray(j+1);temparray(j+1) = tempnode;endendend% Create a new node newnode = Huffman;% Add the probailitiesnewnode.probability = temparray(1).probability + temparray(2).probability;% Add Codestemparray(1).code = '0';temparray(2).code = '1';% Attach Chlldren Nodesnewnode.leftNode = temparray(1);newnode.rightNode = temparray(2);% Delete the first two nodestemparray = temparray(3:size(temparray,2));% Prepend the new nodetemparray = [newnode temparray];endrootNode = temparray(1);
codec = '';
astr=string(a);
% Looping though the tree
% See recursive function loop.m
global di;
di=dic.empty(256,0);
p1=0;
loop(rootNode,codec);
aft='';
for i=1:mfor j=1:na=img(i,j);st=di(4).code;aft=[aft st];end
end
disp(aft)
global ans;
ans='';
yima(rootNode,rootNode,0);
imshow(img);

编码结果,在命令窗口上显示出的
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部