【LeetCode算法笔记】Day1:动态规划基础

目录

  • 动态规划简介
    • 动态规划的定义
    • 动态规划的核心思想
      • 动态规划的简单例子
  • 动态规划特征
    • 最优子结构性质
    • 重复子问题性质
    • 无后效应
  • 动态规划的基本思路

动态规划简介

动态规划的定义

简称DP,是一种求解多阶段决策过程最优化问题的方法。在动态规划中,通过把原问题分解为相对简单的子问题,先求解子问题,再由子问题而得到原问题的解

动态规划的核心思想

  • 原问题分解为若干个重叠的子问题,每个子问题求解过程都构成一个阶段。在完成一个阶段的计算之后,动态规划放过发会执行下一阶段的计算
  • 在求解字问题的构成中,按照自顶向下的记忆化搜索方法或者自底向上的递推方法求解出子问题的解,把结果存储在表格中,当需要再次求解子问题时,直接从表格中查询该子问题的解,从而避免大量的重复计算。

动态规划的简单例子

在这里插入图片描述
在这里插入图片描述
从图中可以看出:如果使用传统的递归算法计算f(5),需要先计算f(3)和f(4),而在计算f(4)时还需要计算f(3),这样f(3)就进行了多次计算。同理f(0)、f(1)、f(2)都进行了动词计算,从而导致了重复计算问题。

为了避免重复计算,我们可以使用动态规划中表格处理方法来处理。

这里我们使用自底向上的递推方法求解出子问题f(n-2)和f(n-1)的解,然后把结果存储在表格中,供随后的计算查询使用。

  • 定义一个数组dp,用于记录斐波那契数列中的值
  • 初始化dp[0]=0,dp[1]=1.
  • 根据斐波那契数列的递推公式f(n)=f(n-1)+f(n-2),从dp(2)开始递推计算斐波那契列的每个数,直接计算出dp(n).
  • 最后返回dp(n)即可得到第n项斐波那契值
class Solution:def fib(self,n):if n==0:return 0if n==1:return 1dp = [0 for _ in range(n+1)]dp[0]=0dp[1]=1for i in range(2,n+1):dp[i]=dp[i-1]+dp[i-2]return dp[n]if __name__ == '__main__':solution=Solution()result = solution.fib(5)print(result)

这里使用缓存(哈希表、集合或数组)保存计算结果,从而避免子问题重复计算的方法,就是动态规划算法

动态规划特征

能够使用动态规划方法解决问题必须满足以下三个特征

  • 最优子结构性质
  • 重叠子问题性质
  • 无后效性

最优子结构性质

最优子结构:指的是一个问题的最优解包括子问题的最优解
在这里插入图片描述

重复子问题性质

重叠子问题性质:指的是在求解子问题的过程中,有大量的子问题是重复的,一个子问题在下一阶段的决策中可能会被多次用到。如果有大量重复的子问题,那么只需要对其求解一次,然后用表格将结果存储下来,以后使用时可以直接查询,不需要再次求解。
在这里插入图片描述

无后效应

无后效性:指的是子问题的解(状态值)只与之前阶段有关,而与后面阶段无关。当前阶段的若干状态值一旦确定,就不再改变,不会再受到后续阶段决策的影响。

也就是说,一旦某一个子问题的求解结果确定以后,就不会在被修改

在这里插入图片描述

动态规划的基本思路

如下图所示,我们在使用动态规划方法解决某些最优化问题时,可以将解决问题的过程按照一定顺序(时间顺序、空间顺序或其他顺序)分解为若干个相互联系的「阶段」。然后按照顺序对每一个阶段做出「决策」,这个决策既决定了本阶段的效益,也决定了下一阶段的初始状态。依次做完每个阶段的决策之后,就得到了一个整个问题的决策序列。

这样就将一个原问题分解为了一系列的子问题,再通过逐步求解从而获得最终结果。

在这里插入图片描述
这种前后关联,具有链状结构的多阶段进行决策的问题叫做多阶段洁厕问题

通常我们使用动态规划方法来解决问题的基本思路如下:

  • 划分阶段:将原问题按顺序(时间顺序、空间顺序或其他顺序)分解为若干个相互联系的「阶段」。划分后的阶段⼀定是有序或可排序的,否则问题⽆法求解。
    这里的「阶段」指的是⼦问题的求解过程。每个⼦问题的求解过程都构成⼀个「阶段」,在完成前⼀阶段的求解后才会进⾏后⼀阶段的求解。

  • 定义状态:将和子问题相关的某些变量(位置、数量、体积、空间等等)作为一个「状态」表示出来。状态的选择要满⾜⽆后效性。

  • 转移状态:根据「上一阶段的状态」和「该状态下所能做出的决策」,推导出「下一阶段的状态」。或者说根据相邻两个阶段各个状态之间的关系,确定决策,然后推导出状态间的相互转移方式(即「状态转移方程」)。

  • 初始化条件和边界条件:根据问题描述、状态定义和状态转移方程,确定初始条件和边界条件

  • 最终结果:确定问题的求解目标,然后按照一定顺序求解每一个阶段的问题。最后根据状态转移方程的递推结果,确定最终结果。

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

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

相关文章

Golang | Leetcode Golang题解之第478题在圆内随机生成点

题目: 题解: type Solution struct {radius, xCenter, yCenter float64 }func Constructor(radius, xCenter, yCenter float64) Solution {return Solution{radius, xCenter, yCenter} }func (s *Solution) RandPoint() []float64 {r : math.Sqrt(rand.…

MySQL面试专题-索引

一、MySQL为什么要选择B树来存储索引? MySQL的索引选择B树作为数据结构来进行存储,其本质原因在于可以减少IO次数,提高查询效率,简单来说就是保证在树的高度不变的情况下可以存储更多的数据。 (一)IO角度 在…

约克VRF打造舒适绿色无污染的生活环境

在生活的各个方面,约克VRF都采取了多种措施助力碳中和。 采用国际领先的空气源热泵技术,只需少量电力就可将空气中的能量转化为室内热量,被称为“大自然的搬运工”!COP能效值最高可达4.24(每用一度电产生4.24度电热量&…

第 3 章:使用 Vue 脚手架

1. 初始化脚手架 1.1 说明 Vue 脚手架是 Vue 官方提供的标准化开发工具(开发平台)。最新的版本是 5.x。文档: https://cli.vuejs.org/zh/ 1.2 具体步骤 第一步(仅第一次执行):全局安装vue/cli。 npm install -g vu…

衡石分析平台系统分析人员手册-仪表盘控件概述

控件​ 控件是仪表盘的基本组成单位。控件种类很多,有展示分析数据的图表类类控件,有展示图片、文字的展示类控件,还有可导出数据、刷新数据、过滤数据等功能类控件。一个完整的仪表盘由多种不同功能的控件构成。 控件类型​ 根据控件是否展…

海外动态代理IP的优缺点有哪些? 动态代理IP与静态代理IP的区别是什么?

海外动态代理IP的优缺点分析 在全球化的数字时代,网络安全和隐私保护的重要性日益凸显。海外动态代理IP作为一种灵活的网络工具,因其独特的特性在多个领域得到了广泛应用。然而,正如任何技术一样,它也有其优点和局限性。以下&…

Shell案例之一键部署mysql

1.问题 我认为啊学习就是一个思考的过程,思考问题的一个流程应该是:提出问题,分析问题,解决问题 在shell里部署mysql服务时,我出现一些问题: 1.安装mysql-server时,没有密钥,安装…

PE结构之导入表

流程图: 文件中\样式 加载到进程中时 加载到进程中时的过程,一张图不够放 续图 整个流程 补充导入表结构IMAGE_IMPORT_DESCRIPTOR 中的ForwarderChain字段, 该解释为 "某个导入模块涉及转发(即该模块的某些函数从其他模块转发过来),那么…

windows安装deepspeed setup.py 207行找不到文件

一直报莫名奇妙的错误,查了半天也没查到 去看了一下源码,需要安装git,我没有安装 git命令获得信息也没啥用 直接注释掉 成功运行

YOLO11改进|注意力机制篇|引入轴向注意力Axial Attention

目录 一、【Axial Attention】注意力机制1.1【Axial Attention】注意力介绍1.2【Axial Attention】核心代码二、添加【Axial Attention】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【Axial Attention】注意力机制 1.1【Axi…

【JPCS独立出版,EI检索稳定】第三届能源互联网及电力系统国际学术会议(ICEIPS 2024)

第三届能源互联网及电力系统国际学术会议(ICEIPS 2024) 2024 3rd International Conference on Energy Internet and Power Systems ICEIPS 2024已成功申请JPCS - Journal of Physics: Conference Series (ISSN:1742-6596) ICEIPS 2024独立出版&…

TCP——Socket

应用进程只借助Socket API发和收但是不关心他是怎么进行传和收的 数据结构 图示Socket连接 捆绑属于隐式捆绑

200Kg大载重多旋无人机价格高昂技术分析

200Kg大载重多旋无人机作为一种高度专业化的航空工具,其价格相较于普通无人机显著较高,这主要是由于其在技术设计和生产过程中所需的高要求所致。以下是对其价格高昂的技术分析: 一、高性能材料与结构设计 1. 高强度轻量化材料:…

Python,Swift,Haskell三种语言在使用正则表达式上的方法对比

这里插入图片描述](https://i-blog.csdnimg.cn/direct/fea1494d0d0c4c9880881493929a8b91.png)在讨论 Python、Swift 和 Haskell 在正则表达式处理字符串方面的优缺点时,可以从它们对正则表达式的支持、灵活性和性能进行比较。以下通过具体的正则表达式字符串匹配例…

【前端】如何制作一个自己的代码(10)

接上文。 颜色名称 将color的属性值,设置成颜色的英文名就能显示对应的颜色。 比如,这里的red表示红色,这种设置颜色的方式是最简单的。 但是不同的浏览器,对颜色的解析可能存在差异,实际开发中不建议使用颜色名称来…

VUE基础(2)

一.分析脚手架 1.1.脚手架文件结构 ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ └── He…

内网wordpress更换IP后无法访问的解决办法

一、现象 一台装有wordpress的台式机,从一个校区移到了另一个校区,更换了IP地址,导致无法正常访问。 二、分析 安装wordpress的时候里面的ip(或域名)都已固定。安装好后,内网通过IP访问&am…

2024年10月份实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先,来看下效果图 在线体验地址:https://geojson.hxkj.vip,并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

7、Vue2(二) vueRouter3+axios+Vuex3

14.vue-router 3.x 路由安装的时候不是必须的,可以等到使用的时候再装,如果之前没有安装的话,可以再单独安装。之前的终端命令行不要关闭,再重新开一个,还需要再package.json文件的依赖中添加。 如果忘记之前是否有安…

ESP32移植Openharmony设备开发---(4)Timer定时器

Timer内核定时器 官方文档:OpenAtom OpenHarmony 所需头文件:los_swtmr.h 头文件所在位置: 基本概念: 软件定时器 软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器,当经过设定的Tick时钟计数…