• 基础练习 Huffuman树(贪心算法)


    问题描述

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

      例如,对于数列{ pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:
      1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{ pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。
      2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{ pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。
      3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{ pi}中删除它们并将和17加入,得到{10, 17},费用为17。
      4. 找到{10, 17}中最小的两个数,分别是10和17,从{ pi}中删除它们并将和27加入,得到{27},费用为27。
      5. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。

    输入格式

      输入的第一行包含一个正整数 n( n<=100)。
      接下来是 n个正整数,表示 p 0,  p 1, …,  pn -1,每个数不超过1000。

    输出格式

      输出用这些数构造Huffman树的总费用。

    样例输入

    5
    5 3 8 2 9

    样例输出

    59

    算法思想:

    ⑴将集合分为两个集合:一个是被选出的候选对象,另一个是未考虑的对象。

    ⑵用一个函数来检查一个候选对象的集合是否解决了问题。

    ⑶还有一个函数检查是否一个候选对象的集合是可行的,也即是否可能往该集合上添加更多的候选对象以获得一个解。和上一个函数一样,此时不考虑解决方法的最优性。

    ⑷选择函数可以指出哪一个剩余的候选对象最有希望构成问题的解。

    ⑸最后,目标函数给出解的值。

    本题的思想是,

    现将集合依次排好序,

    然后每次将a[0]+a[1]求和,并将结果值赋予a[0],而a[1]=-1(负数代表舍弃);

    再次排序得到已经求和过的集合,然后删除第一个集合元素a[0](排序后第一个数为负数)。

    然后,将集合总数减少1个,即为删除的第一个元素。

    最后,依次循环,直至集合元素为1.循环结束

    #include 
    #include 
    using namespace std;
    #define N 100
    
    int main(void){
    	
    	int a[N],b[N];
    	
    	int n;
    	cin>>n;
    	
    	int i,j;
    	for(i=0;i>a[i];
    	}
    	//按其费用的大小排序 
    	sort(a,a+n);
    	int sum=0;
    	
    	while(n>1){
    		
    		i=0;
    		a[i]=a[i]+a[i+1];
    		sum+=a[i];
    		a[i+1]=-1;
    		sort(a,a+n);
    		for(i=0;i
                    
  • 相关阅读:
    Java面试题:如何在Java中进行代码优化以提高性能?
    【中秋征文】使用Python创意中秋节画月饼《花好月圆》
    python:激光点云生成BEV图像
    Docker基本管理
    StarRocks 运维工具 StarGo
    官方教程 Redshift 09 Camera
    深入C++04:模板编程
    ZZNUOJ_C语言1089:阶乘的最高位(完整代码)
    使用 PyTorch 实现 Word2Vec 中Skip-gram 模型
    6-4布线问题(分支限界)
  • 原文地址:https://blog.csdn.net/m0_71272694/article/details/128009770