ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法第2章实践报告

2021-09-26 20:34:25  阅读:133  来源: 互联网

标签:二分 报告 复杂度 分治 mid 实践 算法 搜索 数组


算法第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.分治法的个人体会和思考

在学习分治法的这段时间,我对分治法有了进一步的了解,也对分治法的应用了解的更多了。利用分治法可以将一个大问题拆分成一个个本质相同的小问题,这样可以大大的提高解决问题的效率,可以缩短解决问题所需要的时间,即减小时间复杂度。分治法包括的范围很大,包括:归并排序、快速排序等等,其中在解题过程中我运用最多的就是二分搜索了。但其实虽然分治法的例子有很多,但针对每个问题,分和合的过程都是不同的,不同问题的分解合并过程可以没有任何关系。所以,分治法还是很值得我们细细去思考和探究的。

标签:二分,报告,复杂度,分治,mid,实践,算法,搜索,数组
来源: https://www.cnblogs.com/qiqi-yi/p/15339939.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有