1、对二分法思想的体会:
二分搜索方法充分利用了元素间的次序关系,采用分治策略,其基本思想是将n个元素分成个数大致相同的两半,取a[n/2]与x作比较。如果x=a[n/2],则找出x,算法终止;如果x<a[n/2],则只在数组a的左半部继续搜索x;如果x>a[n/2],则只在数组a的右半部继续搜索x。具体算法如下:
int BinarySearch(Type a[],const Type& x,int n){
//在a[0]<=a[1]<=...<=a[n-1]中搜索X
//找到x时返回其在数组中的位置,否则返回-1
int left=0; int right =n-1;
while(left<=right){
int mid = (left+right)/2;
if(x==a[mid]) return mid;
if(x>a[mid])left=mid+1;
else right=mid-1;
}
return -1;//未找到x
}
每执行一次while循环,待搜索数组的大小就减小一半。在最坏情况下,while循环被执行了O(logn)次。循环体内运算时间需要O(1)时间,因此二分算法在最坏情况下的计算时间复杂性为O(logn)。
2、结对编程情况汇报:
在结对编程中,我们先讨论好,得出大概的算法思想,然后主要由我负责打代码,然后另一个同学在旁边看着,看到有错的地方会提醒我改过来。调试出错后,我们两个一起找bug,不断修改,直到程序通过。我觉得这样,两人合作编程,能有效提高效率。在听同学的想法时,也能让我找到自己平时解决问题时思考不足的地方,从而有利于提高自己的思考和编程能力。
原文:https://www.cnblogs.com/Ypaper/p/9785933.html