如何還沒有了解算法簡介的請去上一章:http://www.cnblogs.com/suxi-blog/articles/6238591.html
下一章是貪心算法和回溯算法:http://www.cnblogs.com/suxi-blog/articles/6239595.html
一.分治法
1.分治法的設計思路是,將一個難以直接解決的大問題,分割成一些規模比較小的相同的小問題,以便各個擊破,分而治之。
2.分治法所能解決的問題的一般有以下的特征:
(1)該問題的規模縮小到一定的程度就可以容易解決(絕大多數的問題都滿足)
(2)該問題是可以分解為若干個規模較小的相同的問題,即改問題具有最優子結構性質(前提,也是絕大多數的問題都滿足的)
(3)利用該問題分解出的字問題的解可以合並該問題(關鍵)
(4)該問題分解出來的各個子問題是相互獨立的(分治法的效率)
(如果具備一二條,但不具備第三條,可以考慮使用貪心算法或動態規划)
3.分治法的基本步驟:
(1)分解:將原問題分解為若干個規模較小、互相獨立、與原問題形式相同的子問題。
(2)解決:若干問題規模較小而容易被解決則直接解,否則遞歸地解各個子問題
(3)合並:將各個子文題的解合並成原問題的解
(記住不是所有的分治法逗逼簡單的蠻力法簡單)
4.分治法的時間性能的與直接計算最小問題的時間、合並子文題解的時間以及子問題的個數有關:
c n=1
T(n)=
aT(n/b)+cn^k n>1
(其中a,b.c.k都是常數。這個遞推描述了大小為n的原問題分解為若干大小為n/b的子問題,其中a個子問題需求求解,而cn^k是合並各個子問題的解所需要的工作量)
當子問題的規模之和小於原問題的規模時,算法的時間復雜度可達到0(n).
二.動態規划
1.簡單的說就是在解決多階決策的過程中動態的選擇最優的過程的方法就是動態規划。
2.與分治法的區別:一般來說子問題不是互相獨立的,可以理解為是分治法的一種改進,不需要求解已有解的子問題(已有解的子問題用表來記錄)
3.適用條件:
(1)最優化原理(最優子結構):一個最優策略的子策略總是最優的---->局部最優,整體最優
(2)無后效性:每個狀態都是過去歷史的一個完整的總結
(3)子問題的重疊性:高效性
(最優子結構:當問題的最優解包含其子問題的最優解時,稱該問題具有最有子結構;重疊子問題是一個遞歸解決方案里包含的子問題雖然很多,但不同子問題很少。少量的子問題被重復解決很多次。)
4.動態規划的最優化原理:作為整個過程策略具有的性質:無論過去的和決策如何,對於前面的決策形成的狀態而言,余下的諸多決策必須過程最優策略。
--------------------------------------------------------------------------------------------------------------------------------------
今天就到這里,下一次是:貪心算法和回溯算法http://www.cnblogs.com/suxi-blog/articles/6239595.html
(哪位知道在文章內容編譯中的大括號怎么寫,還有個問題我是使用ogt來鏈接鍵盤,但在這個編譯器中方向鍵無法使用是怎么回事,還有怎么解決,有知道的大佬告訴我一聲,小弟在此謝過)
