主要内容

huffmandict

为具有已知概率模型的信源生成霍夫曼码字典

说明

[dict,avglen] = huffmandict(symbols,prob) 使用最大方差算法为信源符号 symbols 生成二元霍夫曼码字典 dict。该函数还返回字典的平均码字长度 (avglen),根据输入中的概率 prob 加权。

示例

[dict,avglen] = huffmandict(symbols,prob,N) 使用最大方差算法生成 N 元霍夫曼码字典。

示例

[dict,avglen] = huffmandict(symbols,prob,N,variance) 使用指定的方差算法生成 N 元霍夫曼码字典。

示例

全部折叠

生成二元霍夫曼码字典,还返回平均码长。

指定符号字母表向量 symbols 和符号概率向量 prob

symbols = (1:5);
prob = [.3 .3 .2 .1 .1];

生成二元霍夫曼码,显示平均码长和包含码字字典的元胞数组。

[dict,avglen] = huffmandict(symbols,prob)
dict=5×2 cell array
    {[1]}    {[  0 1]}
    {[2]}    {[  0 0]}
    {[3]}    {[  1 0]}
    {[4]}    {[1 1 1]}
    {[5]}    {[1 1 0]}

avglen = 
2.2000

显示字典中的第五个码字。

samplecode = dict{5,2}
samplecode = 1×3

     1     1     0

使用霍夫曼编码器函数的码字典生成器生成二元和三元霍夫曼码。

指定符号字母表向量 symbols 和符号概率向量 prob

symbols = (1:5);
prob = [.3 .3 .2 .1 .1];

生成二元霍夫曼码,然后显示包含码字字典的元胞数组。

[dict,avglen] = huffmandict(symbols,prob);
dict(:,2) = cellfun(@num2str,dict(:,2),UniformOutput=false)
dict=5×2 cell array
    {[1]}    {'0  1'   }
    {[2]}    {'0  0'   }
    {[3]}    {'1  0'   }
    {[4]}    {'1  1  1'}
    {[5]}    {'1  1  0'}

使用最小方差算法生成三元霍夫曼码,然后显示包含码字字典的元胞数组。

[dict,avglen] = huffmandict(symbols,prob,3,'min');
dict(:,2) = cellfun(@num2str,dict(:,2),UniformOutput=false)
dict=5×2 cell array
    {[1]}    {'2'   }
    {[2]}    {'1'   }
    {[3]}    {'0  0'}
    {[4]}    {'0  2'}
    {[5]}    {'0  1'}

输入参数

全部折叠

信源符号,指定为向量、元胞数组或字母数字元胞数组。symbols 列出了信源产生的不同信号值。如果 symbols 是元胞数组,则它必须为 1×SS×1 元胞数组,其中 S 是符号数。

数据类型: double | cell

每个符号的发生概率,指定为范围 [0, 1] 内的向量。此向量的元素之和必须为 1。此向量的长度必须等于输入 symbols 的长度。

数据类型: double

N 元霍夫曼码字典,指定为范围 [2, 10] 内的标量。此值必须小于或等于输入 symbols 的长度。

数据类型: double

霍夫曼码的方差算法,指定为 'max''min'

  • 'max' - 此函数使用最大方差算法生成 N 元霍夫曼码字典。

  • 'min' - 此函数使用最小方差算法生成 N 元霍夫曼码字典。

输出参量

全部折叠

霍夫曼码字典,以两列元胞数组形式返回。第一列列出输入 symbols 中的不同信号值。第二列对应霍夫曼码字,其中每个霍夫曼码字表示为一个行向量。如果指定输入参量 N,函数以 N 元霍夫曼码字典形式返回 dict。

数据类型: double | cell

字典的平均码字长度,以正标量形式返回,根据输入中的概率 prob 加权。

数据类型: double

参考

[1] Sayood, Khalid. Introduction to Data Compression. 2nd ed. San Francisco: Morgan Kaufmann Publishers, 2000.

版本历史记录

在 R2006a 之前推出

另请参阅

函数