1. 程式人生 > >對二分思想的理解及結對編程

對二分思想的理解及結對編程

arc 分治策略 == con 出現問題 情況 數組 策略 討論

一、對二分法思想的體會

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結對過程中,出現問題兩個人一起捋順代碼的實現過程,很快找出其中發現的錯誤。一些迷惑的問題兩個人一起討論也較容易找出答案。結對編程也使我們也了解到了別人有關代碼的一些想法,學到很多東西,提高了編程的效率,拓寬了自己的解題思維。

對二分思想的理解及結對編程