前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动态规划|约束条件下的三角最短路径

动态规划|约束条件下的三角最短路径

作者头像
double
发布2018-04-02 17:15:00
8540
发布2018-04-02 17:15:00
举报
文章被收录于专栏:算法channel算法channel

这篇文章总结了题目如何符合动态规划的特点,进而如何利用动态规划求解三角约束条件下的最短路径。

1

题目

Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

For example, given the following triangle

代码语言:javascript
复制
[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]

The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).

一套三角路径是指,第k行的第i个元素,只能与第k+1行的第i个元素或第i+1个元素组合,依次规律,到达三角形的bottom.

2

动态规划的特征

求解第k行到bottom的最短路径时,需要求此行的任意一个节点i加上第k+1行到bottom的最短路径,显然这具备了最优子结构的特征;

同时,在求第k-1行到bottom的最短路径时,需要求解第k行到bottom的最短路径,在求第k行到bottom的最短路径时,需要再次求解第k+1行到bottom的最短路径,因此又具备了重复的子问题特征。

综上,可以用动态规划方法求解。

自top到bottom求解,还是自bottom到top? 简单来讲,top层的最短路径一旦求出,这个问题就求出来了,如果从bottom开始求解,bottom的最大路径就是这层各自节点的值。

所以,选择从bottom到top的动态规划算法。

3

列出转移方程

求解第k行到bottom的最短路径时,需要求此行的任意一个节点i加上第k+1行到bottom的最短路径,显然这具备了最优子结构的特征;

题目的输入数据结构: input[n][n]

创建缓存: minpath[n],初始值为最后一层的节点取值。因为是自bottom到top,因此这样赋初始值是合理的,只有一层的最短路径就是在这些节点中选取。

由第k+1层的最短路径,推出第k层的最短路径,标颜色的部分实际上存储着第k+1层的最短路径:

minpath[i] = min(minpath[i], minpath[i+1]) + triangle[k][i];

赋完值后,实际上得到第k层的第i个节点到bottom的最短路径。

因此,遍历第k层的所有节点,便求出了第k层的所有节点到bottom的最短路径,实际上就是更新minpath数组。

以上,问题的分析,不准确的地方,敬请指正。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档