算法第2章实践报告

一、题目:7-1 maximum number in a unimodal array (40 分)

ou are a given a unimodal array of n distinct elements, meaning that its entries are in increasing order up until its maximum element, after which its elements are in decreasing order. Give an algorithm to compute the maximum element that runs in O(log n) time.

输入格式:

An integer n in the first line, 1<= n <= 10000. N integers in the seconde line seperated by a space, which is a unimodal array.

输出格式:

A integer which is the maximum integer in the array

输入样例:

7
1 2 3 9 8 6 5

输出样例:

9

 

二、算法分析

   题目是单峰数组,即只有一个最大值;同时要求时间复杂度为log2,那么就首先考虑用分治法实现。由于只有一个最大值,那么可以通过不断取中间的值m,比较中间值与前一个数a和后一个数b,直到找到m>a并且同时m>b,输出m即可。

 

三、算法时间及空间复杂度分析

  通过二分法找到最大值,其时间复杂度为O(log2);没有建新的数组而开辟空间,所以空间复杂度为O(1)

四、心得体会

  根据题目要求去完成算法,即使能通过但可能算法要求没有达到;同时注意审题是单峰数组;熟悉折半法的使用。

五、分治法的个人体会和思考

  分治法的大多是情况下的时间复杂度是O(log2),所以看到这样的时间复杂度要求要立马反应过来。

 
posted @ 2021-09-27 19:00  赖晓杰  阅读(43)  评论(0编辑  收藏  举报