算法第二章上机实验报告

算法第二章上机实验报告

实践报告任选一题进行分析。

  1. 1.   实践题目
  2. 2.   问题描述
  3. 3.   算法描述
  4. 4.   算法时间及空间复杂度分析(要有分析过程)
  5. 5.   心得体会(对本次实践收获及疑惑进行总结)

1. 实践题目:7-1  二分查找

2. 问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

3. 算法描述:二分查找的基本思想是将n个元素分成大致相等的两部分,用a[n/2]与x做比较,如果x=a[n/2],则找到x,算法停止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.在原来二分搜索算法的基础上,设置一个计数器count记录比较次数,每比较一次,count++。

4. 算法时间及空间复杂度分析(要有分析过程):

时间复杂度:while循环的次数就是时间复杂度:总共有n个元素,渐渐跟下去就是n, n/2, n/4,....n/2^k,其中k就是循环的次数,由于n/2^k取整后>=1,所以令n/2^k=1可得k=log2n,所以时间复杂度为O(logn)。

空间复杂度:辅助空间是常数级别的,所以空间复杂度是O(1)。

5.心得体会(对本次实践收获及疑惑进行总结):

(1) 这一题的算法对我来说整体上还是比较简单的,但是这就折射出通过我的粗心,由于自己打代码的时候while条件的(left<=right),被我打成了(left<right),浪费了好长时间去纠错,以至于在课堂上止步于第一个题。后面下来与同学讨论,才找到了这个非常低级的错误。细节决定成败,以后一定会改正的。

(2) 谢谢老师替我解答count设成全局变量与否的问题,虽然这个问题其实也是由while牵引出来的,但是老师这么一点拨,让我豁然开朗,下次我还是多动手,自己先尝试一下。

posted @ 2018-10-14 13:25  zmkkkk  阅读(110)  评论(0编辑  收藏  举报