動態規劃,就是一種求解最優解問題的。
這麼說,估計大家也覺得太空泛了。想看詳細的說明,請點這裡
那麼我就講我的理解了。
首先,演算法是一種策略,方法,思想,其中,有一種非常常見的常用思想——動態思想。
你要做一件事情,然後,到最後完成。
而你沒做一件事情都影響後面,
而且你每次有很多的選擇
那麼如何每次遇到岔路口,你最後,最快走到終點???
1.你算算去下乙個地方,有幾種方法?每種方法花費多少?n種路
2.你要去下下乙個地方,那在剛才1的基礎上,也就是在下乙個地方上,看這個時候去下下乙個地方,有幾種?從頭到這裡要花費多少?nxn種
3.。。。
4.無限下去,你會發現這個資料其實很龐大,是個n的n次指數
其實呢,這裡面有很多沒用的計算,我們用表記錄每次中最短的距離,那些比較長的,我們直接不要了,這樣就降低了很多很多。
你可以好好看書,按上面說的4個步驟:
什麼最優結構了?遞迴定義最優解?什麼最底向上計算?構造最優解?
這些真的都是一種陳述語,你要明白動態,規劃,什麼東西呢?理解裡面的過程在幹什麼?不是 繼續的看那些步驟,沒用的
1。工廠裝配線排程問題,是個經典的入門問題。不想多說
2.矩陣乘法問題。如何讓矩陣乘法,它們的運算最低??關鍵就是找到那個合理分配的k的位置,這個地方就能產生最優解
具體的偽**,看書吧,這個真不是一兩句能講清楚的
備忘錄???幹什麼的???
因為動態規劃一般是自底向上的,最優求解,能不能最頂向下的,遞迴呼叫???
完全,可以。
怎麼辦?
做乙個備忘錄,把子問題,求解的答案寫進去。每次遞迴時候,就看看表裡面的東西。
這裡有乙個非常經典的問題——最長公共子串行
典型的動態規劃
1.知道什麼是公共子串行?
2.記住有乙個字首的概念!
如何思考這個問題呢?
簡單,看書p209
假如xm=yn,zk=xm=yn,那說明zk-1就是xm-1和yn-1的乙個最長
xm!=yn,zk!=xm,說明zk是xm-1和yn的乙個最長
xm!=yn,zk!=yn,說明zk是xm和yn-1的乙個最長
為什麼???
你自己舉個例子,你好好看看,是不是?
因為這個是個基礎,我當時,怎麼都想不明白,所以後面的就沒法弄明白了
書上用了2個表,b表用來記錄整個路徑,而c表則記錄了最長的路徑的值。
最後的最優二叉查詢樹,你可以直接忽略掉,因為只是前面的那些東西,已經夠你看了,最後,提一句,上面的連線有非常詳細的**,想跑跑**的,就點上面連線。
演算法導論第15章
第三版的clrs改寫了15.1.用乙個rod cut問題代替了assembly line問題。不過總覺得還沒第2版講得好啊。15.1 1 print station l n 如果n 2,print l 2 l 否則的話print station l n l n 1 print n station,l...
《演算法導論》筆記 第15章 總結與思考
歐幾里得旅行商問題是對平面上給定的n個點,確定一條連線各點的最短閉合旅程的問題。這個解的一般形式為np完全的。j.l.bentley 建議通過只考慮雙調旅程 bitonictour 來簡化問題,這種旅程即為從最左點開始,嚴格地從左到右直至最右點,然後嚴格地從右到左直至出發點。在這種情況下,多項式時間...
動態規劃(演算法導論第15章)
動態規劃 dynamic programming 與分治方法相似,都是通過組合子問題的解來求解原問題。其中,分治方法將問題劃分為互不相交的子問題,遞迴的求解子問題,再將它們的解組合起來,求出原問題的解。與之相反,動態規劃應用於子問題重疊的情況,即不同的子問題具有公共的子子問題 子問題的求解是遞迴進行...