博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
白话版 动态规划法
阅读量:6377 次
发布时间:2019-06-23

本文共 1139 字,大约阅读时间需要 3 分钟。

关于动态规划法的解释, 大多都是基于背包问题的, 但背包问题背负了很多算法的解释工作,经常让初学者混淆,刚刚刷leetcode的时候,发现了一个很不错的关于动态规划算法的例题,特来分享一下!

Leetcode120

这是一个典型的动态规划问题:

  • 在走第N步的之前, 第1步到第N-1步已经达到了最优.
  • 走出第N步之后, 第N-1步的最优就要动态变化为"相对最优",而第一步到第N步依然是最优.

动态规划法的优势在于, 前面N-1步保持了"很多"状态, 当走出第N-1步的时候后, 可以基于保存的状态直接得出"很多新的"状态, 然后从新状态中得到最优解.

为了简化问题, 对于上面的题目,我们可以从底向上走:

动态规划法
class Solution:    def minimumTotal(self, triangle):        """        :type triangle: List[List[int]]        :rtype: int        """        for m in range(len(triangle)-1)[::-1]:            # m 为 主数组索引            if (m == len(triangle)-1):                pass            # n 为当前元素索引            for n in range(len(triangle[m])):                triangle[m][n] = min(triangle[m][n]+triangle[m+1][n], triangle[m][n]+triangle[m+1][n+1])                print("第",m,"行", "第",n,"个元素当前值为", triangle[m][n])                              return triangle[0][0]                            def main():    result = Solution().minimumTotal([[2], [3, 4], [6, 5, 7], [4, 1, 8, 3]])         print("最短路径为==>",result)                    if __name__ == '__main__':    main()
动态规划法结果

动态规划与贪心法的区别:

  • 贪心只考虑当前最优, 只保留当前最优的状态;
  • 动态规划法, 不仅保留了当前最优,而且保留了(很多)相对最优的状态

转载地址:http://zixqa.baihongyu.com/

你可能感兴趣的文章
多行省略号
查看>>
Centos 打开80端口
查看>>
【OCP题库-12c】最新CUUG OCP 071考试题库(70题)
查看>>
基于GTID多源复制扩展
查看>>
用SignalR 2.0开发客服系统[系列2:实现聊天室]
查看>>
08面向对象强化
查看>>
好用app
查看>>
页面广告(div)
查看>>
Geoserver汉语版出来啦!!
查看>>
jsp引入struts标签,引入自己写的jquery需要注意的问题
查看>>
Spring Cloud限流详解
查看>>
Numpy求均值、中位数、众数的方法
查看>>
mapreduce 的过程
查看>>
collecitons.deque
查看>>
grunt入门讲解3:实例讲解使用 Gruntfile 配置任务
查看>>
centos7/rhel7安装较高版本ruby2.2/2.3/2.4+
查看>>
Project Euler Problem 17 Number letter counts
查看>>
Oracle数据库,用户的创建及表的创建
查看>>
J2EE--Struts2基础开发笔记
查看>>
css_文本溢出
查看>>