码迷,mamicode.com
首页 > 编程语言 > 详细

算法第二章上机实践报告

时间:2018-10-14 23:06:45      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:实践   复杂   bubuko   分配   而在   image   src   条件   数组   

实践题目:改写二分搜索算法

 

问题描述:设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置

 

算法:

技术分享图片

 

算法描述:该算法只需要在二分搜索算法的基础上,找出当程序没有搜索到要找的值时,有什么条件,找到了又有什么条件。在该算法中,当搜索的left和right相等了,然而要搜索的x并不等于数组a下标为left或right的值的时候,就意味着并未找到x,但这时候还需要判断x是否大于数组a的所有的值又或者小于数组a的所有的值,若大于数组a所有的值,那就需要输出n-1以及n,若小于数组a的所有的值,则需要输出-1以及0,而当x是在数组a的最大值以及最小值之间的时候,就需要输出middle以及middle+1了。

 

算法时间和空间复杂度分析:在这个改进二分搜索算法中,主要还是搜索需要用到循环折半。在二分搜索算法中,假设该数组的长度是N那么二分后是N/2,再二分后是N/4……直到2分到1结束,那么分的次数就是执行的次数,设次数为x,N*(1/2)^x=1,所以x=log(n)。而在自己的改进二分搜索算法中,在循环里不只是折半的语句,还有几个判断,所以时间复杂度为3+log(5n),所以时间复杂度为log(n)。在该算法中,数组的定义以及left、right等的定义都是在循环外,所以他们的空间复杂度为O(1),而middle值的定义在判断left是否小于等于right的循环内,所以每次都需要定义一个middle值,存在变量的分配,所以这里的空间复杂度为O(n),所以该算法的空间复杂度为O(n)。

 

心得体会:这次的课堂打代码感觉不在状态,钻牛角尖挺久的,后来还是队友解决的问题,这体会到结对编程的好处,做完这三道题后,对二分搜索算法的熟悉度又提升了不少了,所以多做做题、打打代码还是有好处的。

算法第二章上机实践报告

标签:实践   复杂   bubuko   分配   而在   image   src   条件   数组   

原文地址:https://www.cnblogs.com/LHHA/p/9788309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!