• 基础练习 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
                    
  • 相关阅读:
    Http协议和Https协议
    5分钟搞懂分布式可观测性
    【数据结构】----枚举
    视频监控系统/视频汇聚平台EasyCVR平台页面展示优化
    错误:ReferenceError: OSS is not defined
    【名城优企游学】国轩高科,用数字化带来强劲发展动力
    docker搭建fastdfs环境
    MIT6.5830 Lab1-Go tutorial实验记录(一
    揭秘油烟净化器保持餐饮厨房清新通畅的秘诀
    2023面试知识点一
  • 原文地址:https://blog.csdn.net/m0_71272694/article/details/128009770