美文网首页
贪心算法最优合并问题

贪心算法最优合并问题

作者: Super_邓帅 | 来源:发表于2016-12-31 19:00 被阅读0次


最优合并问题

给定k个排好序的序列s1,s2,…,sk,用2路合并算法将这k个序列合并成一个序列。假设所采用的2路合并算法合并两个长度分别为m和n的序列需要m+n-1次比较。试设计一个算法确定合并这个序列的最优合并顺序,使所需要的总比较次数最少。
测试用例: 4(序列数)
5 12 11 2(序列中的元素数)
输出: 78(最差情况) 52(最优情况)

分析:

次数最多:总是最长的两个先合并
次数最少:总是最短的两个先合并

#include<stdio.h>
#include<stdlib.h>

int cmp1(const void *a,const void *b){
    return *(int *)a-*(int *)b;//升序 
} 
int cmp2(const void *a,const void *b){
    return *(int *)b-*(int *)a;//降序 
} 

int main(){
    int n;//序列数
    scanf("%d",&n);
    int p[n],p1[n];
    int times=0;

    for(int i=0;i<n;i++){
        scanf("%d",&p[i]);
        p1[i]=p[i];
    } 
    
    for(int i=0;i<n-1;i++){
        qsort(p,n,sizeof(int),cmp1);
        p[0]=p[0]+p[1];
        times+=p[0]-1;
        p[1]=100000;
    } 
    printf("最少次数:%d\n",times);
    
    times=0;
    for(int i=0;i<n-1;i++){
        qsort(p1,n,sizeof(int),cmp2);
        p1[0]=p1[0]+p1[1];
        times+=p1[0]-1;
        p1[1]=0;
    } 
    printf("最多次数:%d\n",times);
    
    return 0;
}
运行截图

相关文章

  • 贪心算法最优合并问题

    最优合并问题 给定k个排好序的序列s1,s2,…,sk,用2路合并算法将这k个序列合并成一个序列。假设所采用的2路...

  • 五大常用算法

    1.贪心算法 贪心算法的要素 1)贪心选择性质:可以通过局部最优选择来构造全局最优解。换言之,直接做出在当前问题中...

  • 如何指定战略路径

    1.打破贪心算法,找到全局最优 1)贪心算法 2)全局最优 要有价值主张,数据代表过去,避免过度依赖贪心算法 3)...

  • 可用贪心算法解决的几个基本问题

    可用贪心算法解决的几个基本问题 关键:看问题有没有贪心选择性质和最优子结构性质。有些问题看似是可以用贪心算法,但是...

  • 王道程序员求职宝典(九)基本算法及链表

    分治法,动态规划与贪心算法 分治法特征分解解决合并递归:自顶向下 动态规划要素最优子结构重叠子问题递推:自底向上步...

  • 贪心算法

    贪心算法 贪心算法是一种遵循近似解决问题的技术,通过每个阶段的局部最优选择(当前最好解),从而达到全局的最优解,它...

  • 思想 / 贪心算法

    适用贪心算法的场合 问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解。这种子问题最优解被称为最优...

  • 简单贪心(2020-01-11)

    贪心算法是指,在对问题求解中,对问题的每一步决策都采取当前意义下最优策略的算法,即问题的整体最优性可以由局部最优性...

  • LeetCode 专题 :贪心算法

    贪心算法,又称贪婪算法。 1、在对问题求解时,总是做出在当前看来最好的选择。即贪心算法不从整体最优上加以考虑。 2...

  • 贪心算法-Python刷题笔记

    贪心算法 贪心选择:通过一系列的局部最优解达到整体最优解。 前提:必须证明贪心选择可以达到最优解:先证明整体最优解...

网友评论

      本文标题:贪心算法最优合并问题

      本文链接:https://www.haomeiwen.com/subject/ptcbvttx.html