对二分思想的理解及结对编程
一、对二分法思想的体会
1.二分法是运用分治策略的典型例子,也称折半查找,充分利用了元素间的次序关系,是一种效率较高的查找方法。实现二分算法有递归和非递归两种方式。
2.基本思想:将n个元素分成大致相同的两半,取a[n/2]与x作比较。如果x=a[n/2],则找到x,算法终止;如果a<[n/2],则只在数组a的左半部分继续搜索x;如果x>a[n/2],则只在数组的右半部分继续搜索x。
3.代码实现:
int BinarySearch(Type a[],const Type&x,int n) { int left = 0;int right = n-1; while(left<=right){ int middle = (left + right)/2; if (x==a[middle]) return middle; if(x >= a[middle]) left = middle + 1; else right = middle -1; } return -1; }
4. 关于时间复杂度的分析:
在这个过程中,每执行一次while循环,待搜索数组的大小减小一半。因此,在最坏的情况下,while循环被执行了O(logn)次。循环体内运算需要O(1)时间,因此整个算法在最坏情况下的计算时间复杂度为O(logn)。
5.优点:提高了查找效率,减小了时间复杂度,易于实现
缺点:具有一定的局限性,只能适用于有顺序的数组
二、关于结对编程
结对编程使我们在编程过程中更易于发现自己的错误,所谓“当局者迷,旁观者清”,有时候自己写的代码不易找出错误。 跟partner结对过程中,出现问题两个人一起捋顺代码的实现过程,很快找出其中发现的错误。一些迷惑的问题两个人一起讨论也较容易找出答案。结对编程也使我们也了解到了别人有关代码的一些想法,学到很多东西,提高了编程的效率,拓宽了自己的解题思维。