一世英明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 Error in check.length("fill") : 'gpar'成分'fill'的长度不能为零
    • ¥15 python:excel数据写入多个对应word文档
    • ¥60 全一数分解素因子和素数循环节位数
    • ¥15 ffmpeg如何安装到虚拟环境
    • ¥188 寻找能做王者评分提取的
    • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
    • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件
    • ¥15 写论文,需要数据支撑
    • ¥15 identifier of an instance of 类 was altered from xx to xx错误
    • ¥100 反编译微信小游戏求指导