算法第二章上机实验报告

Posted jergens

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第二章上机实验报告相关的知识,希望对你有一定的参考价值。

实践题目; 二分查找
问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。PS:该问题就是查找/搜索题,以实例,输入n个数值,从中间开始查找关键字x,比较mid与x,查找成功则输出,不行就将mid与x比较,缩小查找范围,还要记录比较次数
算法描述:int Binary(int a[],int n,int key)

{

int x;                      //定义变量

int left=0,t=0;

int right=n-1;

while(left<=right)            //设置while循环条件,当left<=right即为数组有至少一个元素,可进行循环查找。

{

int mid=(left+right)/2;    //二分法的基本思想,将n个元素等分 ①

t++;                   // 记录比较次数,每做一次比较即有t值加一  ②

if(a[mid]==key) // 将中值与关键字进行比较。

{

cout<<mid<<endl; //输出

cout<<t;

return mid;

}

 if(a[mid]<key)          //关键字大于中值,则将left左值变成中值+1,往右缩小查找范围。

{

left=mid+1;

}

else right=mid-1;       //同理,关键字小于中值,则将right右值变成中值-1,往左缩小查找范围。

//再次回到条件,执行①②;

}

cout<<"-1"<<endl;

cout<<t;

return -1;

}

时间复杂度和空间复杂度:以最坏情况考虑,二分查找第一次在n/2中查找(n为元素个数);第二次在一半的一半中查找,即n/2/2=n/4;……第x次在n/2^x范围内查找,即2^x=n(x=log2^n),所以时间复杂度为O(log2^n)另外,这个是非递归情况在这个过程中,辅助空间为常数级别,所以空间复杂度为O(1)

心得体会:

一、本次实践收获:和队友一起变成的准确率的确提高了不少,而且完成地变自己一个人时更有效率,还有,在编程过程中,我们一起讨论问题,自己说错了队友会及时说出正确的解答,说对了队友也能补充一下,就这样彼此对题目的有了更深刻的印象。有时讨论问题也会引申出其他的知识,促进自己去思考,上述种种让我收益颇丰!

二、疑惑:有时候,两个人的力量也是有限的,就像编程第二题时,老师给我们提了一下意见,但是我们两个人没有优化好算法,最后还是再次问老师才解决了,还有的话,结对确实要两个人的编程水平大致一样,这样的话双方才会有更大的进步,因为如果一个很厉害,另外一个一般,这样可能会出现分工不均的情况。(当然啦,我和我的队友合作的很愉快)

 

以上是关于算法第二章上机实验报告的主要内容,如果未能解决你的问题,请参考以下文章

算法第二章上机实验报告

算法第二章上机实验报告

算法第二章上机实验报告

算法第二章上机实验报告

算法第二章实践上机实验报告

算法第二章上机实验报告