动态规划详解(1)——基础概念

news2024/10/6 1:36:03

动态规划是数学、编程中一个重要的算法

动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领域,并在背包问题、生产经营问题、资金管理问题、资源分配问题最短路径问题和复杂系统可靠性问题等中取得了显著的效果

——百度百科

没错你看不懂是正常的,不然我也不需要写这篇文章了(doge)

忘掉刚才的概念

带你重新梳理

一.名字的含义

动态规划

顾名思义,是一种规划问题的策略,还得是动态的

FIRST:怎样的策略呢?

设想一个问题

如果你解决一个问题,在条件允许下,你是不是会尽力给自己争取最大的利益(不考虑人情世故,纯属理性人)

而动态规划,就是给出你的最优解。

最优解有时不是挣最多的钱,拿最多的东西,而要权衡多方面利弊,比如:价值高低、是否重复……

SECOND:动态是什么意思?为什么还得是动态的呢?

在一个解决问题的过程中,大部分情况会有多个步骤

∵ 我们要求得最后的最优解

∴ 每一个步骤也要做到最优解

假设有两个步骤,第一个步骤是最优解,第二个步骤就是最优解中的最优解,也就是我们最后要求的最优解。无论中间哪一个不对,都不能变成最后的最优解

百度百科中这一段说的大概就是这个意思

怎么样?动态规划的意思是不是更明白了(相比较百度百科

二.动态规划特点

第一个就是刚才说的,最优子结构性质

第二个:无后效性

还是回到我们刚才的栗子(doge

增加成四个步骤

在动态规划中,每个步骤叫做状态

因为我们每一个状态都得是最优解,也就是总结了前面所有的状态,汇集而成的最优解

这就是大名鼎鼎的

无后向性

第三个:子问题的重叠性

这个性质不仅仅在动态规划中出现,在递归中也有

其实这个不能算是特点,更多来说是缺陷吧

插一句题外话

我们教练说,遇到动态规划的题如果不会,可以用递归代替,但拿不到满分

这是为什么呢?

动态规划的优点就在于时间,他已经有效避免了很多重复性的东西

但还是继承了递归的重叠问题

而重叠问题,在实际应用中一定要考虑进去,否则很容易被第二次考虑这个状态时的结果所替代,从而答案错误

看到这里,你是不是对动态规划有了初步的了解?

下一篇文章,我们讲解动态规划怎么在C++中实现

点个赞再走吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/196044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java——根据身高重建队列

题目链接 leetcode在线oj题——根据身高重建队列 题目描述 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个…

Spring AOP表达式(execution)规则——排除切点的应用

背景 需要项目原切面的基础上排除一些类中方法。 本篇文章主要介绍了SpringBoot AOP Pointcut切入点表达式,以及如何排除某些类中的方法的方式。 execution(* com.winup.web.controller..*.*(..)) 参数说明 符号含义execution()表达式的…

【C++之类和对象】默认成员函数

目录前言一、默认成员函数二、构造函数三、析构函数四、拷贝构造函数五、赋值运算符重载前言 前面我们学习了一些类和对象的基本知识,知道了什么是类,类中包括什么东西,以及能够使用一个类来实例化对象,并且会计算类对象的大小。这…

Java Collection 接口下的 “ List 集合” 与 “ Set 集合 ”

Java Collection接口下的“ List 集合” 与 “ Set 集合 ” 每博一文案 一个人最好的底牌,就这两个字: 靠谱,是最高级的聪明。 师父说:人生一回,道义一场,你对人对事的态度,藏着你一生的福报。 千金难买好人缘&#x…

SpringBoot(三):日志文件

目录一、日志文件1.1 日志文件的作用1.2 Spring Boot内置了日志框架1.3 日志的格式说明1.4 自定义日志打印1.5 日志的持久化1.6 日志的级别1.6.1 日志级别有什么作用1.6.2 日志的级别划分1.6.3 日志级别的设置1.7 使用lombok输出日志1.7.1 lombok的原理1.7.2 lombok其他注解一、…

在JS文件中使用或扩展已有的vue文件

工作中遇到一个给现有项目增加一个超时重新登录的提醒框(可在提醒框中直接登录本账户)。 由于页面稍微复杂,本人又是脚手架一把梭过来的,对于直接使用 js 来完成一整个复杂还带逻辑的页面稍显吃力,所以决定先写一个 vu…

建模助手【有求必应】的正确打开方式

今天的话题主要想解除大家对[有求必应] 的一些误解。 因为在日常的反馈中用户似乎对于[提需求] 这玩意儿无论是从概念上还是动作上都很不 “熟悉”。 其实我们对软件认知的上限是一个软件功能的上限,产品以及行业的发展都要从打破固有认知开始。 期待更多的你们跳出…

《新华日报·科技周刊》聚焦蓝海彤翔与《流浪地球2》

瞄准世界科技前沿瞄准江苏科技创新瞄准日常科技生活《新华日报科技周刊》第203期聚焦《流浪地球2》中的大国重器其实就在我们身边重点报道了蓝海创意云渲染农场为《流浪地球2》提供了云计算渲染服务的重要成果“数字生命计划”就是元宇宙吗?电影中人类面临末日危机&…

0基础如何入门人工智能?

1.1 概念 根据维基百科的解释,人工智能是被机器展示的智力,与人类和其他动物的自然智能相反,在计算机科学中 AI 研究被定义为 “代理人软件程序”:任何能够感受周围环境并且能最大化它成功机会的设备。 1.2 重大事件 2016 年 3…

[Java]JavaWeb学习笔记(尚硅谷2020旧版)

文章目录🏀 视频及资料地址🏀 XML⚽ XML 简介🏐 xml 的作用⚽ XML 语法🏐 文档声明🏐 注释🏐 元素(标签)⚾ XML 命名规则⚾ xml 中的元素(标签)也分单双标签🏐 xml 元素属性🏐 语法规…

PHP控制反转和依赖注入的理解(通俗易懂)

目录 1.IoC是什么 2.IoC能做什么 3.IoC和DI 4.IoC(控制反转) 5.DI(依赖注入) 6.我对IoC(控制反转)和DI(依赖注入)的理解 学习PHP各个框架的过程中,都会听过IoC(控制反转) 、DI(依赖注入)这两个概念,总觉得IoC 、DI这两个概念是模糊不清的&#xff…

WINSOFT JSEngine Delphi 6-D11

WINSOFT JSEngine Delphi 6-D11 WinsoftJSEngine被认为是一个海豚引擎,包括一个强大的JavaScript引擎。 Winsoft JSEngine的功能和特点: Microsoft ChakraCore JavaScript强大的引擎实用程序 支持32位和64位窗口 提供给海豚版本6 Eli 10.1和Lazarus 为产…

29岁,从餐饮到网络安全,大龄转行逆袭成功

大龄转行,一直在网络上备受讨论。 从学习能力、试错成本来考虑,转行一定是越早越好,而大龄转行风险极大。 大龄转行,固然并非一条绝路,苏老泉,二十七,始发愤,读书籍,有的…

C++学习记录——사 类和对象(1)

文章目录1、面向对象和面向过程的初步理解2、类的引入3、类的定义4、类的访问限定符及封装1、访问限定符2、封装5.类的实例化6、类对象模型7、this1、this指针2、空指针问题3、C语言和C简单对比1、面向对象和面向过程的初步理解 C语言是一个面向过程的语言,C是一个…

美颜sdk人脸识别代码技术分析

很多人问过小编,什么样的美颜sdk才算好?对于这个问题,小编认为至少要符合以下几个特点。 1、稳定性强;2、识别精准;3、功能多样;4、集成容易;5、离线使用;6、支持多端;7、…

新手入门,深入解析 python lambda表达式

lambda 表达式是 Python 中的匿名函数。它接受任意数量的参数,并返回一个单个表达式的值。它的语法格式如下: lambda arguments: expression 文章目录lambda 函数原型解释lambda 函数用作其它参数lambda 函数高级的技巧多个参数返回多个值条件表达式嵌套…

java基础巩固-宇宙第一AiYWM:为了维持生计,编程语言番外篇之机器学习(项目预测模块总结:线性回归算法、逻辑回归分类算法)~整起

机器学习一、机器学习常见算法(未完待续...)1.算法一:线性回归算法:找一条完美的直线,完美拟合所有的点,使得直线与点的误差最小2.算法二:逻辑回归分类算法3.算法三:贝叶斯分类算法4…

PythonWeb开发基础(一)B/S开发和http协议

文章目录PythonWeb开发基础(一)B/S开发和http协议请求响应连接PythonWeb开发基础(一) B/S开发和http协议 推荐书籍:《HTTP权威开发指南》 前端:数据的格式化呈现,python中的format函数其实就…

【MyBatis】查询语句汇总

定义一个Car类:/*** 封装汽车相关信息的 pojo类*/ public class Car {// 数据库表当中的字段应该和pojo类的属性一一对应// 建议使用包装类, 这样可以防止null的问题private Long id;private String carNum;private String brand;private Double guidePrice;private String pro…

MATLAB入门——线性规划、非线性规划、多目标规划

4-1 线性规划_哔哩哔哩_bilibili 4-2 非线性规划_哔哩哔哩_bilibili 4-3 多目标规划_哔哩哔哩_bilibili 1.线性规划 有限条件下,最大收益 1. 例题 例题:张麻子既要攻碉楼又要追替身,他们一伙6人,总共1200发子弹;每有一人攻确…