首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >充气算法的zlib实现

充气算法的zlib实现
EN

Stack Overflow用户
提问于 2011-12-18 16:41:38
回答 1查看 646关注 0票数 1

inftrees.c (从规范的huffman表示构造查找表的代码)中,作者写道:

代码语言:javascript
复制
 /* replicate for those indices with low len bits equal to huff */
    incr = 1U << (len - drop);
    fill = 1U << curr;
    min = fill;                 /* save offset to next table */
    do {
        fill -= incr;
        next[(huff >> drop) + fill] = here;
    } while (fill != 0);

    /* backwards increment the len-bit code huff */
    incr = 1U << (len - 1);
    while (huff & incr)
        incr >>= 1;
    if (incr != 0) {
        huff &= incr - 1;
        huff += incr;
    }
    else
        huff = 0

虽然我读了很多次这个评论,但我还是能理解掉的意思是什么。另一个问题是作者使用什么方法来构建huffman代码?什么是反向增量?

你能给我解释一下吗,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-12-18 17:42:59

“向后增量huff”的意思是huff = rev(rev(huff) + 1),其中rev反转位0, ..., len - 1

假设len == 7huff是二进制格式的1110100。我们寻找第一个清除位,清除所有较低的(意指)/higher(位模式),并设置该位。

代码语言:javascript
复制
1110100
^
1000000 == incr: loop continues
 ^
0100000 == incr: loop continues
  ^
0010000 == incr: loop continues
   ^
0001000 == incr: loop breaks

1110100: huff
0000111: incr - 1
0000100: huff &= (incr - 1)
0001100: huff += incr
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8553159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档