算法第二章实践报告
1.实践题目名称
7-1 maximum number in a unimodal array (40 分)
You 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
2.问题描述
在一个单峰格式的数组中寻找最大值
3.算法描述
从位于整个数组最中间的数开始。根据单峰数组的特征,每次将选定的数与其前一个和后一个进行比较,若大于前一个,小于后一个,则说明该数在峰值的左边,继续向右边查找;若小于前一个,大于后一个,则说明在峰值的右边,继续向左边查找;如果大于左边且大于右边,则说明该数即为峰值。根据二分法不断缩小范围,直至找到峰值。
4.算法时间及空间复杂度分析(要有分析过程)
二分查找时,取中值的时间复杂度是O(1);每次查找规模是原来规模的一半,所以查找的时间复杂度是T(n/2)。运用主定理求解可得其时间复杂度为O(logn)。
该算法只有mid被引入,所以空间复杂度位O(1).
5.心得体会(对本次实践收获及疑惑进行总结)
写代码前先理清思路,后续打代码时会更加顺畅。当遇到算法出现问题,卡住的时间过长时,可以暂时将其搁置一旁,去尝试新的思路。两人合作打代码,在检查代码时效率会更高,思路会更丰富。
6.分治法的个人体会和思考
分治法将一个很大很复杂的问题拆分为一个个原理结构相同的相较之下更为简单的子问题,再将子问题解决后的结果合并,使得解决问题的方法变得更加地简单,代码更加地简洁。适用于复杂的、可分解为子问题解决方法相似大问题。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步