算法第4章实践报告

实践报告任选一题进行分析。内容包括:

1.     实践题目

2.     问题描述

3.     算法描述

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

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

 

1.       实践题目

7-1 最优合并问题

 2.       问题描述

用2路合并算法合并2个长度分别为m和n的序列需要m+n-1次比较,确定最优合并顺序,使总比较次数最少,确定最差合并顺序,使总比较次数最多

输入格式:

第一行有 1 个正整数k,表示有 k个待合并序列。 第二行有 k个正整数,表示 k个待合并序列的长度。

输出格式:

输出最多比较次数和最少比较次数。

 3.       算法描述

(1)用sort函数对序列排序(非降序)

(2)计算最多比较次数(max):

首先 int k=b[m-1]+b[m-2];

之后用循环计算 k=k+b[i];  // k-1为每轮的比较次数

最后计算 max+=k-1;

(3)计算最少比较次数(min):

在已排好序的数组基础上,将数组前两个数求和 k,置于原有数组的后面,并计算min+=k-1,

然后忽略已求和的数将数组进行sort 排序,就这样重复下去,直至要排序的数组长度为1(即i=n-1)

(4)若先计算 min,则需注意原有数组及其长度发生变化;

(5)若发生段错误,就注意申请数组长度是否过小;

 4.       算法时间及空间复杂度分析

算法中用到几个并列的for循环,则时间复杂度为 O(n);整个过程都是在原数组上进行操作的,所以空间复杂度为 O(1)

 5.       心得体会

这次上机做题速度比之前快,主要是1、3题意容易理解,目前感觉题型比动态规划的要容易点

posted @ 2018-12-01 21:02  树下...听雨  阅读(98)  评论(0编辑  收藏  举报