我刚刚开始学习霍夫曼的数据压缩算法,并且需要以下函数的帮助> 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/