一世英明I 2014-06-16 09:43
浏览 842

范式霍夫曼编码 码长不连续 产生不能识别部分编码

CSDN移动问答

如图 范式霍夫曼编码 遇到这种 编码长度不连续的情况
网上说

extern KBitInputStream bs;
int len = 1;
int code = bs.ReadBit();
while(code >= first[len])
{
code <<= 1;
code |= (bs.ReadBit()); // append next input bit to code
len++;
}
len--;
// 至此,识别出了一个前缀码,下面将code解码为其对应的符号sym
int index = index[len]+(code-first[len]);
int sym = table[index];

但是 first[3] 和 first[4] 应该 是多少呢? 我写成跟 first[5]一样 都是 2 这样 可以识别 00 但是 不能识别 00011 求帮助啊 !!!

备注:first[i]表示长度为i的第一个码字的整数值。根据约定3,即first[3] = 0可得到符号a的范式哈夫曼编码为000。再根据约定2,可得到first[4] = 2*(first[3]+1) = 2,进一步可知b的编码为0010。由约定1可构造出符号c的编码为0011,由此类推可构造出整个码字空间如下:
a=000(0); f=0110(6); k=10101(21);
b=0010(2); g=0111(7); ...
c=0011(3); h=1000(8); u=11111(31);
d=0100(4); i=1001(9);
e=0101(5); j=10100(20);

其中first[3] = 0, first[4] = 0010b = 2, first[5] = 10100b = 20

但是 first[3] 和 first[4] 应该 是多少呢? 我写成跟 first[5]一样 都是 2 这样 可以识别 00 但是 不能识别 00011 求帮助啊 !!!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
    • ¥50 汇编语言除法溢出问题
    • ¥65 C++实现删除N个数据列表共有的元素
    • ¥15 Visual Studio问题
    • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
    • ¥20 求一个html代码,有偿
    • ¥100 关于使用MATLAB中copularnd函数的问题
    • ¥20 在虚拟机的pycharm上
    • ¥15 jupyterthemes 设置完毕后没有效果
    • ¥15 matlab图像高斯低通滤波