算法:求 Huffuman树 构造费用

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


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

                   Huffuman Pic 1

     解题思路:
            对于这一题,我们可以采用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 }

 

posted @ 2015-08-13 11:19  Corerman  阅读(484)  评论(0编辑  收藏  举报