分而治之(divide and conquer,D&C)
阿新 • • 發佈:2019-02-11
分而治之並不是一種演算法,而是一種解決演算法的思想(一種遞迴的演算法)。分而治之單充的理解起來可能有些困難,下面大概的解釋一下:有一個這樣的需求,我有一個長方形,需要分割成均勻的正方形,而且分割成的正方形要儘可能的大。大家可以想一下如何實現這個問題?(思考十幾秒)下面我們用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)
快速排序演算法的思想便是分而治之,後續單獨說明快速排序的演算法。