HuffCode[i].bit[j]=cd.bit[j];
HuffCode[i].start=cd.start;
}
for (i=0;i<n;i++) /*输出每个叶子结点的哈夫曼编码*/
{ for (j=HuffCode[i].start+1;j<n;j++)
printf(“%ld”,HuffCode[i].bit[j]);
printf(“\n”);
}
}
算法6.26
3.哈夫曼树在判定问题中的应用
例如,要编制一个将百分制转换为五级分制的程序。显然,此程序很简单,只要利用条件语句便可完成。如:
if (a<60) b=”bad”;
else if (a<70) b=”pass”
else if (a<80) b=”general”
else if (a<90) b=”good”
else b=”excellent”;
这个判定过程可以图6.19 (a)所示的判定树来表示。哈夫曼树 c语言如果上述程序需反复使用,而且每次的输入量很大,则应考虑上述程序的质量问题,即其操作所需要的时间。因为在实际中,学生的成绩在五个等级上的分布是不均匀的,假设其分布规律如下表所示:则80%以上的数据需进行三次或三次以上的比较才能得出结果。假定以5,15,40,30 和10 为权构造一棵有五个叶子结点的哈夫曼树,则可得到如图6.19 (b)所示的判定过程,它可使大部分的数据经过较少的比较次数得出结果。但由于每个判定框都有两次比较,将这两次比较分开,得到如图6.19 (c)所示的判定树,按此判定树可写出相应的程序。假设有10000 个输入数据,若按图6.19 (a)的判定过程进行操作,则总共需进行31500 次比较;而若按图6.19 (c)的判定过程进行操作,则总共仅需进行22000 次比较。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-22256-4.html
南方黑芝麻糊虽然垄断性地位
重新出发
美国主子这不是变相承认中国人造岛礁是领土吗