huffman.m:
%huffman編碼的遞迴實現。
%輸入:input:第一列為值,第二列為各個值的概率。
% codein,輸入即可,沒用,作遞迴時用到。
%輸出:output:排序後的input。
% code:對應p每行的huffman編碼。
% key:沒用,設為~即可,作遞迴時用到。
%參看測試**huffmantest.m。
function [ output, code, key ] = huffman( input, codein )
[sp,~] = size(input);
if sp==1
code = codein;
key = 1;
output = input;
return;
end[~,index] = sort(input(:,2),'descend');
output = input(index,:);
key = find(index==sp);
if ~iscell(codein)
codein = cell(sp,1);
else
codeintemp = codein;
for t = 1:sp
codein = codeintemp;
endendptemp = output;
ptemp(sp-1,:) = ptemp(sp-1,:)+ptemp(sp,:);
[~, codetemp, keytemp] = huffman(ptemp(1:sp-1,:),codein);
code = codetemp;
code(keytemp) = ;
code=[codetemp,'0']
Huffman樹與Huffman編碼
一.哈夫曼樹概念 路徑 祖先到節點之間的分支構成一條通往節點的路徑 路徑長度 路徑上分支的數目稱為路徑長度 節點的權 給樹中節點所設的物理意義的值 節點帶權路徑長度 從根到該點路徑長度與該點權值的乘機 huffman樹就是所有樹中每點帶權路徑加和最短的樹。二.huffman樹構造步驟 1.根據每個點...
Huffman樹與Huffman編碼
huffman tree簡介 赫夫曼樹 huffman tree 又稱最優二叉樹,是一類帶權路徑長度最短的樹。假設有n個權值,如果構造一棵有n個葉子節點的二叉樹,而這n個葉子節點的權值是,則所構造出的帶權路徑長度最小的二叉樹就被稱為赫夫曼樹。這裡補充下樹的帶權路徑長度的概念。樹的帶權路徑長度指樹中所...
huffman樹和huffman編碼
huffman樹和huffman編碼 include include include include define overflow 1 typedef struct htnode,huffmantree typedef char huffmancode void select huffmantre...