算法--动态规划

  动态规划需要弄清楚两个问题,首先子问题的最优解,其次重叠子问题。首先来看一个问题吧:

有3种硬币,对应的面值是1、2、4,如果要组成11元,最少需要几枚硬币呢?

思路:考虑组成0元,需要0枚硬币;f(0) = 0。这里设f(n)为组成n元最少需要的硬币数;

   考虑组成1元,需要1枚硬币,f(1) = 1;

   考虑组成2元,可以有:f(2) = min (f(1) + 1, f(0) + 1) = f(0) + 1= 1;

   考虑组成3元,可以有:f(3) = min (f(2) + 1, f(1) + 1) = f(1) + 1= 2;

可以看出f(n)依赖于f(i),f(j),,,等等,其中i,j都小于n,也就是说f(n)的解包含了子问题的最优解。另外在解f(1)、f(2),,,f(n)过程中,子问题的解被重复的利用到。

我们可以写出该问题的最优子结构:d(i)=min{ d(i-vj)+1 },其中i-vj >=0,vj表示第j个硬币的面。

  现在可以了解下动态规划的一些概念。用动态规划求解问题的第一步就是描述最优解结构。考虑最优子结构先考虑两个方面:(1) 有多少个子问题被使用在原问题的一个最优解中,以及(2)在决定一个最优解中使用哪些子问题时有多少个选择。这其中第二个问题也是描述最优子结构的关键,上面的例子中考虑11元的最优解时,使用哪些子问题便有3个选择。除了最优子结构外,使用于动态规划仍需满足重叠子问题,也就说可以用递归的算法反复的求解同样的子问题,而不是总产生新的问题。动态规划算法每个子问题只解一次,把解保存在一个在需要时就可以查看的表中,而没错查询表的时间为常数。另外动态规划算法是自底向上来求解,由上面的例子可以看出,求f(11)时,需要的子问题的值已计算过了。

  动态规划算法的时间复杂度也是需要考虑的,一般来说,算法的时间复杂度依赖两个因素:1,求最优解时需要考虑的选择的个数;2,总共有多少个子问题。上面的例子有O(n)个子问题,且有三个选择来检查每个子问题,则时间复杂度是O(n)。

  使用动态规划求解的问题也是较多,典型的例子有:

  01背包问题;

  LCS最长公共子序列问题;

  有向无环图的最短路径问题(带权,不带权值的可以用深度/广度优先遍历来求);

分析待以后再补充。

  

  

转载于:https://www.cnblogs.com/xiaer/p/5237925.html

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

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

相关文章

[译]机器人操作系统简介:终极机器人应用框架(上)

2019独角兽企业重金招聘Python工程师标准>>> [译]机器人操作系统简介&#xff1a;终极机器人应用框架 /*** 原文出处&#xff1a;https://www.toptal.com/robotics/introduction-to-robot-operating-system* author dogstar.huang <chanzonghuanggmail.com> 2…

底量超顶量超级大黑马指标源码_一旦出现底量超顶量形态,是超级大黑马诞生!...

一、底量超顶量当股价形成头部时&#xff0c;成交量必须放大&#xff0c;这种放量虽然不能和上市前三天相比&#xff0c;但也必须是相对天量&#xff0c;随即出现天价。但是&#xff0c;有些个股在形成头部之时&#xff0c;成交量只是象征性地放大&#xff0c;换手率低&#xf…

AIKit v4.11.0 – WordPress AI 自动编写器、聊天机器人、写作助手和内容重定向器 / OpenAI GPT 插件

AIKit v4.11.0&#xff1a;WordPress的AI革命 一、引言 AIKit v4.11.0是一款为WordPress用户精心设计的强大插件&#xff0c;该插件集成了OpenAI的GPT-3技术&#xff0c;为用户提供了前所未有的AI写作和聊天机器人功能。此版本的推出&#xff0c;将WordPress的功能扩展到了全新…

精华阅读第6期|程序猿的世界,你不懂!

上周&#xff0c;微信圈被一篇文章刷屏了&#xff01;那就是西乔出品的《你为什么总招不到程序员&#xff1f;》&#xff0c;西乔的漫画之所以这么火&#xff0c;很重要的原因就是她懂程序猿的生活&#xff0c;同时作品也能够引起大家的共鸣。其实&#xff0c;移动开发精英俱乐…

ai建立使用图案_ai自定义图案的方法详解步骤图

1.ai中如何制作剪纸纹理图案确定以后&#xff0c;大概可以看到这样的操作界面&#xff0c;界面上多了一个”图案选项“面板&#xff0c;在软件界面中心&#xff0c;可以看到的图案是5排5列的图形&#xff0c;也就是”图案选项“下面显示的份数”5X5“&#xff0c;也可以自己另外…

nginx(五)rewrite

**ngx_http_rewrite_module模块配置**将请求的uri基于正则表达式进行重写&#xff1b;例&#xff1a;http-->httpsdomain1.tld-->domain2.tlduri1-->uri2指令&#xff1a;rewrite regex replacement [flag];regex:正则表达式&#xff0c;用于匹配用户请求的uri&#x…

恒生估值系统_恒生指数和恒生国企指数投资价值分析

恒生指数和恒生国企指数都是港股的大蓝筹指数。恒生指数是从香港股票市场挑选出50只优质蓝筹股票组成的指数。恒生国企指数又称为H股指数。H股指注册地在内地&#xff0c;但是上市地在香港的外资股票。恒生国企指数的成分股数目是没有限制的&#xff0c;但是必须为市值最大&…

java程序练习

数组求和作业 开发环境&#xff1a;java 工具&#xff1a;eclipse 两种数据类型excel和csv 在同学建议下&#xff0c;我选择用csv文件打开&#xff0c;这就引来了第一个问题&#xff0c;在java中如何调用csv文件。以下是我百度的结果 http://www.educity.cn/java/627496.html &…

mysql数据库增删改查关键字_MySQL数据库(增删改查语句)

MySQL数据库(增删改查语句)一.登录数据库&#xff1a;----> mysql -uroot -proot;(对应用户名和密码)二.SQL语句&#xff1a; 数据定义语言DDL 用来定义数据库、表、列&#xff0c;关键字为 create、alter、drop 数据操作语言DML 用来进行数据库更新的操作&#xf…

ECC 算法

一、简介 1&#xff09;椭圆曲线密码学的初级读本 http://8btc.com/thread-1240-1-1.html 2&#xff09;ECC加密算法入门介绍 http://www.pediy.com/kssd/pediy06/pediy6014.htm &#xff13;&#xff09;ECC算法原理的认识 http://blog.csdn.net/sszgg2006/article/details/41…

hwd是长宽高吗_五菱皮卡要来了,五种形态任你选,颜值是你期待的吗?

近日&#xff0c;网友上传了五菱皮卡的渲染图&#xff0c;引起了大家对五菱皮卡的热烈讨论。在刚过去的2020年&#xff0c;五菱凭借性价比超高的宏光MINI EV成为了新能源领域的领头羊&#xff0c;而后推出的‘大四座’家用车五菱凯捷也取得了五万台的预定量&#xff0c;五菱一时…

Java多线程:用三个线程控制循环输出10次ABC

题目&#xff1a;有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C&#xff0c;要求, 同时启动三个线程, 按顺序输出ABC, 循环10次。 解题思路&#xff1a;要按顺序输出ABC, 循环10次&#xff0c;就要控制三个线程同步工作&#xff0c;也就是说要让三个线程轮流输出&#…

mysql if语句后面执行两个语句_MySQL的if,case语句使用总结

Mysql的if既可以作为表达式用&#xff0c;也可在存储过程中作为流程控制语句使用&#xff0c;如下是做为表达式使用&#xff1a;IF表达式IF(expr1,expr2,expr3)如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL)&#xff0c;则 IF()的返回值为expr2; 否则返回值则…

mac mysql 默认字符集_MacOS中Mysql设置默认字符集

一、查看字符集mysql> show variables like character%;-------------------------------------------------------------------------------------| Variable_name | Value |----------------------------…

原创 通过PEB获得进程路径 (附完整工程)

完整工程&#xff1a;http://files.cnblogs.com/files/Gotogoo/%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86%E5%99%A8%28x86%26%26x64%29.zip PEB&#xff08;Process Environment Block&#xff0c;进程环境块&#xff09;存放进程信息&#xff0c;每个进程都有自己的PEB信息。位于…

土豚mysql_树莓派LNMP配置

修改软件源1.首先备份源列表&#xff1a;sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup2.而后打开sources.list文件修改&#xff1a;sudo vim /etc/apt/sources.list软件源可已在网上查查&#xff0c;有ubuntu官方的、阿里云的、清华的等需要注意首先查看自己的…

Windbg SOS and CLR版本不一致的解决方案

由于测试服务环境与Windbg运行环境的差异&#xff0c;这就可能出现Windbg在分析dump文件时.net sos.dll和mscordacwks.dll版本不一致问题&#xff0c;从而导致windbg调试器的扩展命令无法正常使用&#xff0c;具体的解决方法如下&#xff1a;1.首先定义Windgb symbols路径&…

mysql镜像远程连接_docker 创建mysql镜像,并成功进行远程连接

1.安装1.1 拉取镜像docker pull mysql拉取成功可以验证一下docker images1.2 创建并启动一个mysql容器docker run --name ly-mysql -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -d mysql–name&#xff1a;给新创建的容器命名&#xff0c;此处命名为ly-mysql-e&#xff1a;配置…

[DIV/CSS] 【译】60个有用CSS代码片段

2019独角兽企业重金招聘Python工程师标准>>> 1、垂直对齐 如果你用CSS&#xff0c;则你会有困惑&#xff1a;我该怎么垂直对齐容器中的元素&#xff1f;现在&#xff0c;利用CSS3的Transform&#xff0c;可以很优雅的解决这个困惑&#xff1a; .verticalcenter{posi…

java 类数组_Java常用类-字符串、日期类、算法及数组工具类等

大家好&#xff0c;乐字节的小乐又和大家见面了。这次要给大家讲述的是Java常用类。主要有以下知识点&#xff1a; 字符串相关类&#xff08;String 、StringBuffer、StringBuilder&#xff09; 算法及数组工具类(Arrays) 日期类 基本数据类型包装类 Math类 File类 枚举类一、 …