分而治之,各個擊破
將大問題變成分成和原問題類似的小問題再分別解決每個小問題,遞迴地使用分而治之策略來解決
分治法的三個步驟:
劃分問題:把問題的例項劃分成子問題
遞迴求解:遞迴解決子問題
合併問題:合併子問題的解得到原問題的解
劃分問題不一定要劃分成相同的問題,可以是與原問題相似的子問題
分治法與軟體設計的模組化方法非常相似。為了解決乙個大的問題,可以:
1) 把它分成兩個或多個更小的問題;
2) 分別解決每個小問題;
3) 把各小問題的解答組合起來,即可得到原問題的解答。小問題通常與原問題相似,可以遞迴地使用分而治之策略來解決。
分治法所能解決的問題一般具有以下幾個特徵(適用條件)
1.該問題的規模縮小到一定的程度就可以容易地解決;(遞迴出口)
2.該問題可以分解為若干個規模較小的相同問題;即該問題具有最優子結構性質;
3.利用該問題分解出的子問題的解可以合併為該問題的解;
4.該問題所分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子問題。 避免重複計算。(dp就是分治+避免冗餘計算)
模板:
if 問題規模小到可以直接解決
直接解決該問題
else
將問題分解成k個規模較小的子問題
for(i=1;i<=k;i++)
遞迴呼叫該分治演算法,分別解決每乙個子問題
將各子問題的解合併為原問題的解
分治法可以用於乙個區間對半分,也可以乙個矩陣分塊,乙個圖形分塊這麼來分。一般劃分的規則是保證分成大小規模相同的。(詳見習題三四)
分治習題:
第八章 指標 第八章 指標
1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...
C primer plus 第八章(一)
a int a 10 b int ob a c int p a d int function int const int 問 是引用?取位址?答 b表示引用,即 ob是a的別稱,從此ob與a就綁在一起同生同變,簡直就是乙個人 c中 表示取位址 d中函式原型中的形參也是 引用 注意第二形參的 cons...
第八章(筆記)
能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...