算法.动态规划 导航/数塔取数字问题
目錄
前言
從1+1開始
總結下概念
地圖到圖
回頭看
?代碼
動態規劃經典問題
前言
下面的概念和公式可能會嚇到你,看不懂沒關系,就是讓你惡心的。反正我看著也挺惡心,專業就是讓你看不懂,看懂了怎么能叫專業呢?
動態規劃(dynamic programming) DP
解決策過程(decision process)最優化的數學方法
動態規劃實際上是一類題目的總稱,并不是指某個固定的算法。動態規劃的意義就是通過采用遞推(或者分而治之)的策略,通過解決大問題的子問題從而解決整體的做法。動態規劃的核心思想是巧妙的將問題拆分成多個子問題,通過計算子問題而得到整體問題的解。而子問題又可以拆分成更多的子問題,從而用類似遞推迭代的方法解決要求的問題。
從1+1開始
比如:有這么一棵樹,求AB? AC 兩條路徑的最小值,很簡單吧:求A+B,A+C最小值
?同理,如下樹:很簡單吧:求B+D,B+E 最小值
組合一下:求A到葉子節點的最近距離
A+B(子樹) ?和 A+C(子樹) ?的最小值嗎
B子樹 不也是 B+D,B+E的最小值
C子樹類似
總結下概念
不然不好描述:
樹的路徑最小值:一棵樹的所有路徑最小值我
計算方法:樹的路徑最小值 = 根節點 + 左右子樹的路徑最小值
這就是:數塔取數問題,有啥用?
再實際一步:假如E和F數值一樣,是不是可以合并成這樣。解決辦法一樣
?類似(多了幾個節點而已):
?
變形(值不在節點上了,而是在路徑上):
A到B = 6km
A到C=1km
問題:A-H的最近距離
分解:
X = B到H的最近距離+ A到B的距離
Y = C到H的最近距離 + A到C的距離
X 和 Y求最小值
B到H的最近距離:
X1 = D到H的最近距離 + B到D距離
Y1 = E到H的最近距離 + B到E距離
X1 和 Y1 求最小值
D到H的最近距離:只有一條路,當然也是最近,距離為10
這不就是導航嗎?
地圖到圖
百度地圖導航:延平門導航到烽火科技園,并使用“測距”:
?給每個路口標記,并勾勒路線:
?抽象為數據結構圖,并標記路徑距離,單位M:問題,求1-6的最短距離
?復雜的導航無非點多幾個,層級多,但如果用1W臺計算機支持呢,這點計算就是毛毛雨。
回頭看
在看公式,是不是能懂幾分了。 區別是:上面是列表,但存儲圖也可以其他數據結構,下邊是用數組存儲,下標的Fi,j也是標識第i行第j列的節點。數據公式就是抽象概念或者思想的描述,而咱們的教學大部分直接從 公式入手,讓咱們自己去理解上面一大串,也是難為我們了。當然么有公式可以不,可以,但很不方便,就跟沒有了成語,需要說半天才能清楚,或者也說不清楚。 如果從公式直接看不出抽象的東西,也不著急,多自己走走上面的步驟,在試圖給別人說,你是不是也想找一種描述方式,不然很難說清。
?代碼
?代碼能力強的話,代碼已經出來了。
可以看出上面是找路徑的問題,是在圖的基礎上做的, 圖怎么存儲直接影響后邊的代碼。這里就累贅了。 動態規劃又分治的思想,就比如這個代碼實現,就又很多小問題組成,數組,列表,鄰接表,遞歸,熟悉了這些自然不是問題。 計算機本身就是分治的思想體現。問題來了,如果不能拆分的呢,比如思想,拆不開,拆開了也合并不在一塊了,這種問題就是當前計算機解決不了的問題。學習算法,1是對編碼能力的鍛煉,2就是學習解決問題的思路和思想。
動態規劃經典問題
?數塔取數問題 (√ 本次解決)?
?矩陣取數問題(√ 本次解決)
?編輯距離
?背包問題
?最長遞增子序列
?最大子段和
?最長公共子序列Lcs
?正整數分組
具體問題描述和實現可以參考博文:
java-動態規劃算法學習筆記 - huster-stl - 博客園動態規劃(dynamic programming)是運籌學的一個分支,是求解決策過程(decision process)最優化的數學方法。在面試筆試中動態規劃也是經常作為考題出現,其中較為簡單的DP題https://www.cnblogs.com/huststl/p/8664608.html
總結
以上是生活随笔為你收集整理的算法.动态规划 导航/数塔取数字问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020中职技能高考计算机,我市62名中
- 下一篇: 安装微软活动目录的八个重要理由