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