對二分法的理解及組隊程式設計情況
對二分法的理解及組隊程式設計情況
一:對二分法的理解
1:關於二分法:二分法是一種典型的查詢演算法,是必須掌握的查詢方法之一;是運用分治策略的典型例子,也稱折半查詢,其時間複雜度為O(logN),是效率較高的一種查詢方法。
2:使用條件:儲存在陣列中的有序序列。
3:基本思想:(以非降序排序為例)將n個元素分成大致相同的兩半,取a[n/2]與x作比較。如果x=a[n/2],則找到x,演算法終止;如果a<[n/2],則只在陣列a的左半部分繼續搜尋x;如果x>a[n/2],則只在陣列的右半部分繼續搜尋x。
4:程式碼實現:
A. 非遞迴方式:
int BSearch(int a[], int 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 > middle) left = middle + 1;
else right = middle - 1;
}
return -1;
}
B.遞迴方式:
int BinarySearch(a[], int x, int left ,int right){
if(left < right){
int middle = (left + right )/2;
if(x == a[middle])
return middle;
else if (x < a[middle])
return BinarySearch(a, x, 0, middle - 1);
else
return BinarySearch(a, x, middle + 1, right);
}
return -1;
}
5:複雜度分析:
每執行一次迴圈,待搜尋的陣列大小減少一半。因此,最壞情況下,迴圈被執行O(logN)次。迴圈體內運算需要O(1)時間,因此整個演算法在最壞情況下的計算時間複雜性為O(logN)。
6:優缺點
優點:大大提高了查詢效率,減少了時間複雜度
缺點:只能運用在有序的陣列中
二:組隊程式設計情況
我和我的隊友都是好學的菜鳥,在學習過程中,由於時間關係,我們選擇先獨立完成學習任務,再一起探討解題過程中遇到的問題以及如何解決,這讓我學多了一種思路,讓我能夠更清楚自己程式碼的不足,不斷改進不斷進步。