第二章实验实践报告

实践报告

第一题

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

 

1.实验题目:二分查找 

2.问题描述

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

 

3.算法描述

二分查找算法关键是下标的mid、left、right的变化,开始是left=0和right=length-1,接着就要判断需要查找的值x和mid的比较,mid=(left+right)/2,如果x大于mid,范围就变成mid+1到right,小于则变成left到mid-1,等于则直接返回mid,这就是二分查找的基本内容,然后题目要求二分查找的次数,就是求循环的次数。

 

4.算法时间和空间复杂度

二分法的基本思想就是将n个元素分成大致的两半,拿x和mid去比较,然后继续通过分成两部分的方式去查找,其实时间复杂度就是while的循环次数。一共有n个元素,每次循环变成n/2,n/4,n/8……n/2^k, 其中k就是循环的次数。

令n/2^k=1,得k=log2n(2为底数,n为对数)所以时间复杂度为O(log2 n)。

而空间复杂度,它是对一个算法在运行过程中临时占用存储空间大小的量度。所以它强调的是使用的辅助空间的的大小,而不是指所有的数据所占用的空间(不会像时间那样会一直累加,二分查找的空间复杂度为O(logn)。

 

5.心得体会

本次实验我主要遇到两个问题,第一个是二分查找算法时left和right找不好,第二个是无法求出比较次数。第一次做的时候我令left和right等于头尾元素的值,这是不理解二分查找算法导致的错误,left和right应该是下标的值。其次就是比较次数,每次分半的时候只有三种情况,而且只能运行一种,所以在分半的时候添上一条计数语句即可,这题最后做得挺好,没有什么不理解的地方。

 

6.工作照

 

 

posted @ 2018-10-14 10:01  荷里活DJ  阅读(153)  评论(0编辑  收藏  举报