hufftree和huffcode函数
时间: 2024-01-17 08:06:01 浏览: 71
hufftree和huffcode是Matlab中自带的用于生成Huffman编码的函数,具体实现如下:
1. hufftree函数
```matlab
function hTree = hufftree(symbols, probabilities)
% 构建Huffman树
nSymbols = length(symbols);
hTree = repmat(struct('prob', [], 'left', [], 'right', []), 2*nSymbols-1, 1);
for i = 1:nSymbols
hTree(i).prob = probabilities(i);
end
for i = nSymbols+1:2*nSymbols-1
[minProb, minInd] = min([hTree(1:i-1).prob]);
hTree(i).left = minInd;
hTree(i).prob = minProb;
hTree(minInd) = [];
[minProb, minInd] = min([hTree(1:i-1).prob]);
hTree(i).right = minInd;
hTree(i).prob = hTree(i).prob + minProb;
hTree(minInd) = [];
end
```
这个函数的输入是信源符号symbols和对应的概率probabilities,输出是构建得到的Huffman树hTree。函数的实现过程是:
- 通过循环遍历所有的符号,为每个符号创建一个节点,设置节点的概率为输入的probabilities中对应的概率。
- 通过循环构建Huffman树,每次找到权值最小的两个节点,作为新节点的左右子节点,新节点的权值为左右子节点的权值之和。
- 直到构建完整个Huffman树。
2. huffcode函数
```matlab
function hCode = huffcode(hTree)
% 计算Huffman编码
nSymbols = (length(hTree)+1)/2;
hCode = repmat({''}, nSymbols, 1);
for i = 1:nSymbols
nodeInd = i;
while nodeInd ~= length(hTree)
parentNodeInd = find([hTree.left] == nodeInd | [hTree.right] == nodeInd);
if hTree(parentNodeInd).left == nodeInd
hCode{i} = ['0', hCode{i}];
else
hCode{i} = ['1', hCode{i}];
end
nodeInd = parentNodeInd;
end
end
```
这个函数的输入是Huffman树hTree,输出是每个符号对应的Huffman编码hCode。函数的实现过程是:
- 通过循环遍历所有符号,从叶节点开始向上遍历Huffman树,每当遇到一个左子节点,将对应的编码加上0;每当遇到一个右子节点,将对应的编码加上1。
- 最终得到每个符号对应的Huffman编码。
阅读全文