算法第四章上机实验报告

  1. 实践题目

    7-1 最优合并问题 

  2. 问题描述

    给定k 个排好序的序列, 用 2 路合并算法将这k 个序列合并成一个序列。 假设所采用的 2 路合并算法合并 2 个长度分别为m和n的序列需要m+n-1 次比较。试设 计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。 为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。

   3.算法描述

    要获得最小比较次数,则每次都取最小序列合并;要获得最多比较次数,则每次取最大序列合并。

 while(min_mark<k-1)
    {
        min_sum= min_sum+a[min_mark]+a[min_mark+1]-1;
        a[min_mark]=a[min_mark]+a[min_mark+1];
        a[min_mark+1]=0;
        min_mark++;
        sort(a,a+k);
    }
    for(int hh=1;hh<=k-1;hh++)
    {
        max_sum=max_sum+b[k-1]+b[k-2]-1;
        b[k-1]=b[k-1]+b[k-2];
        b[k-2]=0;
        sort(b,b+k);
    }

   4.算法时间及空间复杂度分析(要有分析过程)

    时间复杂度:排序O(nlogn)合并(n-1)(2*O(1)+O(n))=O(n^2)

    空间复杂度:数组存储O( n) 

        5.心得体会(对本次实践收获及疑惑进行总结)

    在实践过程中,贪心算法的使用过程中,最重要要决定贪心选择的方法,才能得到整体的最优解

原文地址:https://www.cnblogs.com/yanjingyin/p/10051503.html