第八章 (一)分治

2022-06-13 09:48:14 字數 1053 閱讀 4470

分而治之,各個擊破

將大問題變成分成和原問題類似的小問題再分別解決每個小問題,遞迴地使用分而治之策略來解決

分治法的三個步驟:

劃分問題:把問題的例項劃分成子問題

遞迴求解:遞迴解決子問題

合併問題:合併子問題的解得到原問題的解

劃分問題不一定要劃分成相同的問題,可以是與原問題相似的子問題

分治法與軟體設計的模組化方法非常相似。為了解決乙個大的問題,可以:

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 常...