當乙個問題的規模很大時,直接求解往往比較困難。對於這類問題,很大一部分是可以採取分而治之的思想來處理的。
分治法是把問題劃分成多個子問題來進行處理。這些子問題,在結構上跟原來的問題一樣,但是規模比原來的問題要小。如果得到的子問題還是比較大,那麼可以接著細分,一直細分到可以接受的程度為止。這樣就可以用迭代的方法,分別求解這些子問題,最後再將子問題的解組合起來,就可以得到原問題的解。
對於乙個規模為n的問題p(n),可以將它分解成k個規模較小的子問題,這些子問題互相獨立,且結構跟原問題的結構相同。在解這些問題的時候,又可以對每乙個子問題進行進一步的分解,直到某乙個閾值n0時為止。遞迴地解這些子問題,再把各個子問題的解結合起來,就得到原問題的解。這就是分而治之的思想。
分治法的設計步驟:
其中n0是乙個閾值,當問題規模小於等於n0時,就不需要再對問題進行分解,而直接呼叫adhoc求解。adhoc是用來直接求解規模最小問題p的子演算法。merge用來把所有子問題的解合併成原問題的真正解。
從上面的圖中可以看出,分支思想的實現有三個步驟:
(1)劃分步:把輸入的問題劃分成k個子問題。一般使這k個問題的規模大致相同。
(2)治理步:當問題的規模大於預定義的n0時,治理步由k個遞迴呼叫組成。
(3)組合步:組合步主要用來將各子問題的解合併成原問題的解。這一步對分治法的實際效能很重要。
分而治之的思想
分治 divide and conquer 是一種演算法正規化,也是一種解決問題的思想。步驟如下 1.分解 divide 將問題分解為同一型別的子問題 2.治理 conquer 遞迴地解決子問題 3.合併 combine 合併子問題的答案,得出原問題的答案。任何乙個可以用計算機求解的問題,所需的計算...
在工作中使用分而治之的思想
分而治之,是將大問題分解為小問題,然後求解每個小問題,最終完成求解剛開始的大問題的一種思想和方法。分而治之是演算法中經常採用的一種思路,其實,在日常的工作中,我們也可以採用分而治之的思想更好的完成自己的工作。前幾天,自己收到乙個任務,程式完成後,在進行完必要的效能優化後,經過計算,發現仍然需要20個...
分而治之 D C)
分而治之 能將問題逐步分解,但並非可用於解決問題的演算法,而是一種解決問題的思路。分而治之演算法是遞迴的,使用分而治之 d c 解決問題的過程包括兩個步驟 找出遞迴邊界條件,這種條件必須盡可能簡單 不斷地將問題分解 或者說縮小規模 直到符合遞迴邊界條件。注意 假設要將一塊地均勻地分成方塊,確保分出的...