基於matlab實現哈夫曼編碼演算法
阿新 • • 發佈:2021-01-05
查詢使用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);
編碼結果,在命令視窗上顯示出的