huffman编码的MATLAB递归实现

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{t} = codeintemp{index(t)};
    end
end
ptemp = output;
ptemp(sp-1,:) = ptemp(sp-1,:)+ptemp(sp,:);
[~, codetemp, keytemp] = huffman(ptemp(1:sp-1,:),codein);
code = codetemp;
code(keytemp) = [];
code{sp-1}=[codetemp{keytemp},'0'];
code{sp}=[codetemp{keytemp},'1'];
end
huffmanTest.m:

clear;
close all;
clc;
input = rand(150,2);
input = input / sum(input(:,2))
[output,code,~] = huffman(input,[])



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值