码迷,mamicode.com
首页 > 编程语言 > 详细

算法:求 Huffuman树 构造费用

时间:2015-08-13 14:07:10      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

    问题背景:
            Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。
            给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:
              1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}
                中。这个过程的费用记为pa + pb。
              2. 重复步骤1,直到{pi}中只剩下一个数。
              在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。


      本题任务:
            对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用,构造示例参考下图。

                   技术分享

     解题思路:
            对于这一题,我们可以采用qsort函数进行排序,并设计精简操作代码即可。


 

      参考代码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 int compare (const void * a, const void * b) //small-> big
 5 {
 6     return *((int*)a)-*((int*)b);
 7 }
 8 int main(){
 9     int num,i;
10     scanf("%d",&num);
11     int* numlist=(int*)malloc(sizeof(int)*num);
12     for(i=0;i<num;i++)
13         scanf("%d",&numlist[i]);
14     int sum=0,temp;
15     while(num>1)
16     {
17         qsort(numlist,num,sizeof(int),compare); //SORT
18         temp=numlist[0]+numlist[1];
19         sum+=temp;//Two Small Number Add
20         numlist=numlist+1;
21         *numlist=temp;
22         num--;
23     }
24     printf("%d",sum);
25 return 0;
26 }

 

算法:求 Huffuman树 构造费用

标签:

原文地址:http://www.cnblogs.com/corerman/p/4726730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!