算法第2章实践报告
2021/9/26 20:40:50
本文主要是介绍算法第2章实践报告,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
算法第2章实践报告
1.实践题目名称
7-1 maximum number in a unimodal array
2.问题描述
该题就是要在一个数值先单调递增然后再单调递减的整数数组里找到最大值并输出,且要求时间复杂度在O(log n)。
3.算法描述
因为该数组存在一个峰值,而题目要求找到的也是这个峰值,并且为了减少时间的开销、降低时间复杂度,我们可以采用二分搜索的方式进行查找。我们先定义一个整型数组,然后给数组赋值,然后再采用二分搜索的方式找到最大值。
首先记当前数组的第一个元素下标为low,最后一个元素的下标为high,中间元素的下标为mid,并且mid=(low+high)/2,然后开始二分搜索。
二分搜索能进行的前提是low<=high,所以在每次进行二分搜索前先判断是否满足该条件。
当a[mid]>a[mid+1]并且a[mid]>a[mid-1]时,a[mid]就是最大值,直接返回结果;
当只满足a[mid]>a[mid+1]时,则证明此时已经过了峰值,所以这时候需要往回找,因此为了缩小范围,high=mid-1;
当只满足a[mid]<a[mid+1]时,则证明还没到峰值,此时需要往后找,所以此时low=mid+1;
然后一直循环判断,直到找到为止。
4.算法时间及空间复杂度分析
时间复杂度分析:因为本题采用的是二分搜索的方式,每次搜索完当前数组的长度都减少一半,所以时间复杂度为O(log n)。
空间复杂度分析:
本题只用了一个数组存放数据,并没有用到辅助空间,所以本题的空间复杂度为O(1)。
5.心得体会
在本次的实践课中,相对来说还是进行的比较顺利的,在和搭档的配合下完成了两道题目。在这次的实验课中,我对分治法有了更进一步的运用,也对分治法更加的熟悉,体会到了分治法的好处。在本次的实践中,还是碰到了一点难题,就是二分法求函数的零点,我把代码提交上去的时候,系统显示运行超时,然后我便稍微修改了一下就可以了,但是我感觉它们之间并没有很大的差别,我也不太清楚其中的原由。但我后来思考了一下,可能是函数的原因吧。
6.分治法的个人体会和思考
在学习分治法的这段时间,我对分治法有了进一步的了解,也对分治法的应用了解的更多了。利用分治法可以将一个大问题拆分成一个个本质相同的小问题,这样可以大大的提高解决问题的效率,可以缩短解决问题所需要的时间,即减小时间复杂度。分治法包括的范围很大,包括:归并排序、快速排序等等,其中在解题过程中我运用最多的就是二分搜索了。但其实虽然分治法的例子有很多,但针对每个问题,分和合的过程都是不同的,不同问题的分解合并过程可以没有任何关系。所以,分治法还是很值得我们细细去思考和探究的。
这篇关于算法第2章实践报告的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)