ICode9

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

算法第二章上机实践报告

2021-10-04 16:33:41  阅读:146  来源: 互联网

标签:二分 上机 复杂度 分治 问题 算法 logN 第二章


一、实践题目:maximum number in a unimodal array

 

二、问题描述:找出单峰数组(按先增到峰值,再减小的顺序排号)中的最大值,时间复杂度为logN

 

三、算法描述:本题采用 二分搜索的思想,取最左为l,最右为r。在l<r的情况下,m=(l+r)/2,判断m位置的数是否为峰值:若小于m+1位置,则l=m+1,继续判断;若大于m+1位置,则r=m-1,继续判断。直到m位置的数为峰值,则查找完成。

 

四、算法时间及空间复杂度的分析:

T(n)=T(n/2)+f(1),n^log21=1,所以T(n)=logn。因为无使用辅助空间,所以空间复杂度为O(1)。

 

五、心得体会:

这道题因为数组内有一定的顺序,又对时间复杂度要求logN,所以自然的想到了使用二分搜索。这也可以说是二分法合适的一个特点:有序。

想用分治的思想,重点在于几个关键点不能出错:中位数的改变,以及终结条件。但又是这两点比较难想,所以代码跑起来总是有奇奇怪怪的错误,比如一直是输出0,或者输入之后就没反应这类问题。出现这样的问题肯定就是关键点不对,需要重点检查这些部分。

 

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

比起暴力解法,稍微改变一点代码就可以减少时间复杂度这充分说明了分治思想的优点。

选择使用分治法需要原问题可以查分成几个相同的子问题,且问题规模较大,就可以分治,由子问题的合并得出原问题的答案。但要是子问题有较多重复的时候就需要使用动态规划了。

 

标签:二分,上机,复杂度,分治,问题,算法,logN,第二章
来源: https://www.cnblogs.com/tuyibo/p/15366624.html

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

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

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

ICode9版权所有