分治,即分而治之,是將一個規模爲n的問題分解爲k個規模較小的子問題,這些子問題互相獨立且與原問題相同。遞歸地解決這些子問題,而後將各子問題的解合併獲得原文題的解。其算法設計模式以下:算法
divide-and-conquer(P){編程
if (|P|<=n0)設計模式
adhoc(P);ide
divide P into smaller subinstances P1,P2,...,Pk;函數
for (i=1; i<=k; i++)學習
yi = divide-and-conquer(Pi);設計
return merge(y1,y2,...,yk);遞歸
在人們大量的實踐中,發如今用分治法的時候,使子問題規模大體相同是最好的,,而許多問題中,將一個問題分紅大小相等的k個子問題的處理方法(通常狀況下k=2)幾乎老是比子文體規模不等的好。方法
對分治法深有體會的一次是第一次結對編程那會的第二題。原先老師還沒要求時間複雜度爲O(log2 n)時,我是直接在main函數裏直接寫了if進行判斷的,而後一堆的判斷語句。把時間複雜度擴大到了O(n)。後來就開始思索要怎樣將複雜度變小。當時是明確知道要用二分法才能將時間複雜度變小,但還不知道怎麼在find函數裏添加語句進行判斷。用二分法就能夠將時間複雜度變爲O(log2 n)。後來加上了下面這兩個語句。di