动态规划算法实现------空间中的移动(路径)问题

目录
一、单方向移动(青蛙跳台阶、爬楼梯)问题
1、问题
2、确定动态规则(DP、状态方程)
3、确定初始值
4、动态规划算法代码实现
(1)完整代码
(2)程序速度优化
二、可选路径问题(多方向移动、机器人移动)问题
1、问题
2、确定动态规则(DP、状态方程)
3、确定初始值
4、动态规划算法代码实现
(1)完整代码
(2)程序速度优化
5、数学组合求解机器人移动问题
三、移动中最值(最小路径和)问题
1、问题
2、确定动态规则(DP、状态方程)
3、确定初始值
4、动态规划算法代码实现
(1)完整代码
(2)程序速度优化

动态规划算法实现------空间中的移动(路径)问题

       在前面一章中,我们从整体上概括了动态规划算法的求解步骤,下面我们用动态规划算法来解决常见的移动(路径)问题,从求解过程中,我们可以进一步理解动态规划算法是如何实现的。

一、单方向移动(青蛙跳台阶、爬楼梯)问题

 1、问题

       一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?

2、确定动态规则(DP、状态方程)

        本题是一个单方向移动问题。由于青蛙每次可以跳1级台阶或2级台阶,青蛙可以由第n-1级或第n-2级跳到第n级,因此,青蛙跳到n级的累计跳法是青蛙跳到第n-1级的累计跳法与青蛙跳到第n-2级的累计跳法之和,也即青蛙处于第n个状态的累计跳法是第n-1个状态的累计跳法和第n-2个状态的累计跳法的和。记累计跳法为dp[i],可以看作是第i个状态,则动态规则DP:dp[i]= dp[i-1]+ dp[i-2]。在本例中,青蛙每次跳一个台阶或二个台阶是实现状态的方式,这两种方式决定了当前状态dp[i]是由直接相关的两个状态dp[i-1]、dp[i-2]参与计算。

3、确定初始值

       再来确定初始值,考虑到计算机的循环的索引(下标)从0开始,dp[1]= dp [0]+ dp[-1]中出现-1状态,显然-1不适合为循环的索引,因而第1级需要单独处理。另外,青蛙跳到第2级,即进入第2个状态,有2种跳法,为统一符合动态规则DP:dp[2]= dp [1]+ dp [0],我们需要规定dp [0]=1,显然不偏离计算结果,完全是统一方便计算。第1级即为初始状态,显然累计跳法为1,可以记为dp[1]=1。

4、动态规划算法代码实现

(1)完整代码

       下面代码是按上述分析过程实现的,完全体现了我们上面对动态规划的论述,从代码中就能看到动态规划算法的思想,我们可以结合下面代码来理解动态规划算法在本问题中的应用。

def frog_jump(n):#当只跳一级时,也即只有一个状态,没有状态转移,特别情况,单独进行处理。if n <= 1:  return 1else:# 生成一个n+1长度的列表为了存放青蛙跳到各台阶的跳法,索引1表示青蛙跳到第1个台阶,依次类推。# 由于增加了0索引,因此列表长度不是n,而是n+1。# 0不造成计算结果的影响,下面等效于dp=[None for i in range(0,n+1)]dp = [0 for i in range(0, n + 1)]#确定普通情况初始值。dp[0] = 1dp[1] = 1#计算普通情况。for i in range(2, n + 1):dp[i] = dp[i - 1] + dp[i - 2]#动态规则(DP)return dp[n]print(frog_jump(10))
运行结果:

(2)程序速度优化

       上面代码非常适合我们理解动态规划算法,但在实际应用中,我们也希望提高计算速度,因而,我们没必要把青蛙每跳一个台阶的累计跳法保存下来,我们在循环中仅仅需要保留最近两个状态的值即可得到当前状态的值。上面代码可以简化为下面代码,下面代码更节省内存资源。

def frog_jump(n):#当只跳一级时,也即只有一个状态,没有状态转移,特别情况,单独进行处理。if n <= 1:  return 1else:#普通情况初始值。x = 1y = 1#计算普通情况。for i in range(2, n + 1):x, y = y, y + x #动态规则(DP)#上行代码等效于下面。#y=y+x#x=yreturn yprint(frog_jump(10))

运行结果:

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

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

相关文章

记录一次线上fullgc问题排查过程

某天&#xff0c;接到测试部门反馈说线上项目突然很快&#xff0c;由于当前版本代码和上一版本相比就多了一个刚上线了一个5分钟1次的跑批任务&#xff0c;先关闭次任务后观察是否卡顿&#xff0c;并检查堆内存是否使用完造成频繁gc 1.通过jmap命令查看堆内存中的对象 2.生成当…

淘宝商品评论数据接口,淘宝商品评论API接口

淘宝商品评论数据接口可以通过淘宝开放平台API获取。 通过构建合理的请求URL&#xff0c;可以向淘宝服务器发起HTTP请求&#xff0c;获取商品评论数据。接口返回的数据一般为JSON格式&#xff0c;包含了商品的各种评价信息。获取到商品评论数据后&#xff0c;可以对其进行处理…

如何使用数字化系统赋能企业营销?数字化系统对于企业的作用?

数字化系统对于企业的营销活动能够提供多方面的帮助。 1. 数字化系统可以帮助企业更精准地了解客户的需求和行为&#xff0c;从而更好地定位产品和服务。如蚓链数字化营销系统可以通过数据分析和挖掘&#xff0c;帮助企业深入了解客户群体的特点和喜好&#xff0c;进而调整企业…

Gnuradio+AM解调

1. https://wiki.gnuradio.org/index.php/PLL_Carrier_Tracking 2. https://wiki.gnuradio.org/index.php?titleComplex_to_Mag#Example_Flowgraph

使用vue3+element-ui plus 快速构建后台管理模板

一、安装 vue3 脚手架 npm create vuelatestcd vue-ui-template #切换到刚刚创建好的vue项目根目录中 npm install #下载项目所需要的依赖包 npm run dev #启动运行项目服务项目启动后&#xff0c;默认页面显示如下&#xff1a; 二、安装element-ui plus 官网链接&#xff1a;…

C++ (Chapter 1)

C (一) 1.C的命名空间 先来看一个C语言的例子: 下面这段代码是可以正常运行的. #include<stdio.h> int rand 0; int main() {printf("%d \n", rand);return 0; }但是,包含了一个头文件之后,甚至无法通过编译. #include<stdio.h> #include<stdli…

Maven下载与文件配置

文章目录 官网下载相应文件修改配置文件设置环境变量 官网下载相应文件 https://maven.apache.org/ 点击Download ,找到Files 下载好了&#xff0c;请解压&#xff0c;放在你需要存储的位置&#xff01; 修改配置文件 打开解压的文件&#xff1a; 在conf 下有一个setting…

TensorFlow案例学习:对服装图像进行分类

前言 官方为我们提供了一个 对服装图像进行分类 的案例&#xff0c;方便我们快速学习 建议按顺序观看&#xff0c;这是一个小系列&#xff0c;适合像我这样的初学者入门 配置环境&#xff1a;windows环境下tensorflow安装 图片分类案例学习&#xff1a;TensorFlow案例学习&…

沪深300期权一个点多少钱?

经中国证监会批准&#xff0c;深圳证券交易所于2019年12月23日上市嘉实沪深300ETF期权合约品种。该产品是以沪深300为标的物的嘉实沪深300ETF交易型指数基金为标的衍生的标准化合约&#xff0c;下文介绍沪深300期权一个点多少钱?本文来自&#xff1a;期权酱 一、沪深300期权涨…

推荐几个技术学习的网站

USB中文网 点击打开 USB中文网 - USB技术开发交流USB中文网是国内领先的专业USB技术网站&#xff0c;提供USB开发入门教程&#xff0c;USB设备开发&#xff0c;USB驱动开发&#xff0c;USB摄像头&#xff0c;USB麦克风&#xff0c;USB存储设备&#xff0c;USB-HID设备&#x…

华为认证 | HCIP-Datacom,这门认证正式发布新版本!

华为认证数通高级工程师HCIP-Datacom-Campus Network Planning and Deployment V1.5&#xff08;中文版&#xff09;自2023年9月28日起&#xff0c;正式在中国区发布。 01 发布概述 基于“平台生态”战略&#xff0c;围绕“云-管-端”协同的新ICT技术架构&#xff0c;华为公司…

随着 ChatGPT 凭借 GPT-4V(ision) 获得关注,多模态 AI 不断发展

原创 | 文 BFT机器人 在不断努力让人工智能更像人类的过程中&#xff0c;OpenAI的GPT模型不断突破界限GPT-4现在能够接受文本和图像的提示。 生成式人工智能中的多模态表示模型根据输入生成文本、图像或音频等各种输出的能力。这些模型经过特定数据的训练&#xff0c;学习底层模…