二分法:
二分思想是解决编程问题的一个重要思想,通过分半不断缩小判定区间,来降低问题规模,最后达到降低问题复杂度的目的。
采用二分法的条件是:
1、符合单调性 2、中间值mid可判定
二分搜索
典型的二分法例子是二分搜索算法,算法将n个有序元素分成大致相同的两半,通过对中间值的判定,确定所求目标数所在区间,
在不断进行区间分半操作,缩小判定范围,直到找到目标值。
采用二分搜索算法需要满足:1、数列有序 2、顺序结构存储(链式存储对结点操作只能通过next指针操作,对元素下标操作不合适)
时间复杂度:O(logn)
代码(非递归)
int BinSearch(int a[],int left,int right,int key) { if(left>right)
return -1; int mid = (left + right) >> 1; if(a[mid] == key)
return mid; else if(a[mid] > key)
BinSearch(a,left,mid-1,key); else
BinSearch(a,mid + 1,right,key); }
代码实现:(递归)
int BinSearch(int a[],int n,int key) { int left = 0,right = n-1; while(left <= right) { int mid = (left + right) >> 1; if(a[mid] == key)
return mid; else if(a[mid] > key)
right = mid - 1; else
left = mid + 1; } return -1; }
结对编程感想:
在我看来结对编程的目的,主要是学习不同风格的代码和理解同种算法的多种不同思想,通过结对之间的相互
沟通和交流,更容易从多个角度来理解算法,也能促进共同进步。同时也能加强对代码阅读的能力,因为在今后
的工作或者学习中,有很大部分的代码是分工合作完成,因此学会阅读别人代码十分重要,当然写出易懂优美的代码
也是自己努力的目标。在结对编程中能够互相学习,共同进步,是非常有意义的!