1. 程式人生 > >分而治之(divide and conquer,D&C)

分而治之(divide and conquer,D&C)

分而治之並不是一種演算法,而是一種解決演算法的思想(一種遞迴的演算法)。分而治之單充的理解起來可能有些困難,下面大概的解釋一下:有一個這樣的需求,我有一個長方形,需要分割成均勻的正方形,而且分割成的正方形要儘可能的大。大家可以想一下如何實現這個問題?(思考十幾秒)下面我們用D&C的策略來實現一下,上面說到D&C是遞迴的。那麼,首先需要遞迴的兩個步驟:a)找出基線條件(儘可能簡單的條件)b)不斷的將問題分解,直到達到基線條件

那麼我們現在可以討論上面的長方形問題了,例如長方形的長為640,寬為400

不斷的切割長方形,直到長方形的長為寬的倍數,第一次未640-400,形成新的長方形(400,240),第二次繼續切割形成(240,160),第三次切割(160,80),所以分割成的最大正方形邊長為80.

程式碼如下:

#長方形分解成等量正方形(儘可能大的正方形)
#x為長方形的長,y為長方形的寬
def divide(x,y):
    if x % y == 0:
        return y
    else:
        if (x-y) > y:
            return divide((x-y),y)
        else:
            return divide(y,(x-y))
m = divide(640,400)
print(m)

      快速排序演算法的思想便是分而治之,後續單獨說明快速排序的演算法。