查找使用matlab实现的Huffman算法时找了很久,所以就贴出来大家分享下
正文
新建一个脚本,里面存放存储树节点的类
classdef Huffman
properties
leftNode = [] %左孩子
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);
end
temparray = thearray;
% Create the Binary Tree
for k = 1:size(temparray,2)-1
% First Sort the temp array
for i=1:size(temparray,2)
for j = 1:size(temparray,2)-1
if (temparray(j).probability > temparray(j+1).probability)
tempnode = temparray(j);
temparray(j) = temparray(j+1);
temparray(j+1) = tempnode;
end
end
end
% Create a new node
newnode = Huffman;
% Add the probailities
newnode.probability = temparray(1).probability + temparray(2).probability;
% Add Codes
temparray(1).code = '0';
temparray(2).code = '1';
% Attach Chlldren Nodes
newnode.leftNode = temparray(1);
newnode.rightNode = temparray(2);
% Delete the first two nodes
temparray = temparray(3:size(temparray,2));
% Prepend the new node
temparray = [newnode temparray];
end
rootNode = 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:m
for j=1:n
a=img(i,j);
st=di(4).code;
aft=[aft st];
end
end
disp(aft)
global ans;
ans='';
yima(rootNode,rootNode,0);
imshow(img);
编码结果,在命令窗口上显示出的