算法.动态规划 导航/数塔取数字问题

目录

前言

从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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值