1. 程式人生 > >對二分法的理解及組隊程式設計情況

對二分法的理解及組隊程式設計情況

對二分法的理解及組隊程式設計情況

一:對二分法的理解

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:優缺點

優點:大大提高了查詢效率,減少了時間複雜度

缺點:只能運用在有序的陣列中

 

二:組隊程式設計情況

我和我的隊友都是好學的菜鳥,在學習過程中,由於時間關係,我們選擇先獨立完成學習任務,再一起探討解題過程中遇到的問題以及如何解決,這讓我學多了一種思路,讓我能夠更清楚自己程式碼的不足,不斷改進不斷進步。