我刚刚开始学习霍夫曼的数据压缩算法,并且需要以下函数的帮助> filltable()和invertcode()

我不明白为什么需要一个代码表数组。

while (n>0){
   copy = copy * 10 + n %10;
   n /= 10;
}

请帮助我了解函数的该部分的内容,为什么将n大于0为何将其除以十,因为无论将其除以多少,它总是大于0。

代码链接:http://www.programminglogic.com/implementing-huffman-coding-in-c/
void fillTable(int codeTable[], Node *tree, int Code){

    if (tree->letter<27)
        codeTable[(int)tree->letter] = Code;
    else{
        fillTable(codeTable, tree->left, Code*10+1);
        fillTable(codeTable, tree->right, Code*10+2);
    }

    return;
}
void invertCodes(int codeTable[],int codeTable2[]){
    int i, n, copy;

    for (i=0;i<27;i++){
        n = codeTable[i];
        copy = 0;
        while (n>0){
            copy = copy * 10 + n %10;
            n /= 10;
        }
        codeTable2[i]=copy;
}

**编辑**

为了使这个问题更清楚,我不需要解释霍夫曼编码和解码,而是需要解释这两个函数如何工作以及为什么需要编码表。

最佳答案

n是一个int。因此,随着时间的流逝它将减少到0。如果n在第一次迭代中从302开始,它将在第一个n /= 10;之后减少为30。在while循环的第二次迭代结束时,它将减少为3。在第四次迭代结束时,它将等于0(int 4 / int 10 = int 0)。

这是整数数学。没有小数位扩展到无穷大。

关于c++ - 霍夫曼的数据压缩填充表和代码反转问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26514506/

10-08 22:03