带你读《图解算法小抄》二十一、动态规划(15)

简介: 带你读《图解算法小抄》二十一、动态规划(15)

带你读《图解算法小抄》二十一、动态规划(14)https://developer.aliyun.com/article/1347948?groupCode=tech_library.


2)解题步骤

为了解决最小下降路径和的问题,我们可以使用动态规划的思想来解决。

 

  • 定义状态:我们使用一个二维数组 dp 来表示动态规划的状态,其中 dp[i][j] 表示从第一行到第 i 行的最小下降路径和,且路径的最后一个元素位于第 i 行的第 j 列。
  • 初始化状态:我们将 dp 数组初始化为一个与 matrix 数组相同大小的二维数组,并将第一行的元素复制到 dp 数组中。
  • 定义状态转移方程:对于每个位置 (i, j),我们需要考虑从上一行的哪个位置 (i-1, k) 转移而来,其中 k 的取值范围为 [j-1, j, j+1],我们选择转移过来的路径中和最小的那个路径,即 dp[i][j] = matrix[i][j] + Math.min(dp[i-1][j-1], dp[i-1][j], dp[i-1][j+1])
  • 最终结果:路径的最小下降路径和将会出现在 dp[n-1][j] 中的最小值,其中 n 是数组的大小。

 

 

下面是使用动态规划解决最小下降路径和问题的算法框架:

 

function minFallingPathSum(matrix) {
  const n = matrix.length;
  const dp = [...matrix];  for (let i = 1; i < n; i++) {
    for (let j = 0; j < n; j++) {
      dp[i][j] += Math.min(
        dp[i - 1][j - 1] ?? Infinity,
        dp[i - 1][j],
        dp[i - 1][j + 1] ?? Infinity
      );
    }
  }
  return Math.min(...dp[n - 1]);
}

23.最小下降路径和

1)题目描述

给定一个大小为 n x n 的二维整数数组 matrix,找到从第一行到最后一行的最小下降路径和。每一步只能移动到下一行中相邻的元素上。在这里,相邻的元素指的是位于当前元素右下方和右下方的两个元素。

要求路径上的数字总和最小。

2)解题步骤

为了解决最小下降路径和的问题,我们可以使用动态规划的思想来解决。

 

  • 定义状态:我们使用一个二维数组 dp 来表示动态规划的状态,其中 dp[i][j] 表示从第一行到第 i 行的最小下降路径和,且路径的最后一个元素位于第 i 行的第 j 列。
  • 初始化状态:我们将 dp 数组初始化为一个与 matrix 数组相同大小的二维数组,并将第一行的元素复制到 dp 数组中。
  • 定义状态转移方程:对于每个位置 (i, j),我们需要考虑从上一行的哪个位置 (i-1, k) 转移而来,其中 k 的取值范围为 [j-1, j, j+1],我们选择转移过来的路径中和最小的那个路径,即 dp[i][j] = matrix[i][j] + Math.min(dp[i-1][j-1], dp[i-1][j], dp[i-1][j+1])
  • 最终结果:路径的最小下降路径和将会出现在 dp[n-1][j] 中的最小值,其中 n 是数组的大小。

下面是使用动态规划解决最小下降路径和问题的算法框架:

 

function minFallingPathSum(matrix) {
  const n = matrix.length;
  const dp = [...matrix];  for (let i = 1; i < n; i++) {
    for (let j = 0; j < n; j++) {
      dp[i][j] += Math.min(
        dp[i - 1][j - 1] ?? Infinity,
        dp[i - 1][j],
        dp[i - 1][j + 1] ?? Infinity
      );
    }
  }
  return Math.min(...dp[n - 1]);
}


带你读《图解算法小抄》二十一、动态规划(16)https://developer.aliyun.com/article/1347938?groupCode=tech_library

相关文章
|
存储 算法 编译器
如何优化单片机程序里面的C代码方法
如何优化单片机程序里面的C代码方法
331 0
|
机器学习/深度学习 算法 计算机视觉
基于FPGA的RGB图像转化为灰度图实现,通过MATLAB进行辅助验证
基于FPGA的RGB图像转化为灰度图实现,通过MATLAB进行辅助验证
|
6月前
|
缓存 供应链 监控
VVIC seller_search 排行榜搜索接口深度分析及 Python 实现
VVIC搜款网seller_search接口提供服装批发市场的商品及商家排行榜数据,涵盖热销榜、销量排名、类目趋势等,支持多维度筛选与数据分析,助力选品决策、竞品分析与市场预测,为服装供应链提供有力数据支撑。
|
5月前
|
数据采集 安全 数据可视化
数据清洗必看的7个要点
数据清洗是确保分析准确的关键。本文详解七大要点:了解数据、处理缺失值、去重、统一格式、处理异常值、转换类型及验证逻辑一致性,助你打好数据分析基石,避免“垃圾进垃圾出”。
|
5月前
|
人工智能 自然语言处理 自动驾驶
超越文本:多模态大语言模型如何让AI“看世界
超越文本:多模态大语言模型如何让AI“看世界
|
9月前
|
人工智能 自然语言处理 监控
阿里云连续6年入选 Gartner®ABI 魔力象限报告,中国唯一!
近日,Gartner发布2025年《分析与商业智能平台魔力象限》报告,阿里云Quick BI第六年入选“挑战者”象限。报告肯定其在可视化、报表及自然语言查询(NLQ)方面的竞争力,并认可其融合AI与BI能力、推动数据分析民主化的创新成果。Quick BI已在零售、金融、制造等多个行业落地应用,助力企业实现高效数据驱动决策。
|
SQL 存储 缓存
日志服务 SQL 引擎全新升级
SQL 作为 SLS 基础功能,每天承载了用户大量日志数据的分析请求,既有小数据量的快速查询(如告警、即席查询等);也有上万亿数据规模的报表级分析。SLS 作为 Serverless 服务,除了要满足不同用户的各类需求,还要兼顾性能、隔离性、稳定性等要求。过去一年多的时间,SLS SQL 团队做了大量的工作,对 SQL 引擎进行了全新升级,SQL 的执行性能、隔离性等方面都有了大幅的提升。
589 104
|
数据采集 存储 DataWorks
DataWorks Copilot:让你的数据质量覆盖率一键飞升!
在数据加工链路中,如何确保高质量的数据产出是一个一直需要重点解决的问题。阿里云DataWorks的数据质量规则模板可以帮助用户建设数据质量,在离线表上定义相关的规则。为优化手动配置规则的工作量,DataWorks的智能助手 DataWorks Copilot 推出了数据质量规则推荐功能,您可以使用这一功能,一键提升数据质量覆盖度。
1018 20
DataWorks Copilot:让你的数据质量覆盖率一键飞升!
|
5G 网络架构 UED
网速只拼Mbps?解码网速真相的五大关键因素
Mbps(兆比特每秒)是衡量数据传输速度的单位,表示每秒传输的百万比特数。它是评估网络性能的核心指标,广泛应用于家用宽带、移动网络和企业级网络中。Mbps 数值越高,理论上数据传输越快,但实际体验还受网络拥塞、丢包率和信号强度等因素影响。例如,在网络高峰时段或信号较弱的地方,即使Mbps数值高,也可能出现卡顿。5G和光纤技术显著提升了Mbps速率,但仍需考虑硬件设备如路由器和网卡的性能瓶颈。理解Mbps及其影响因素,有助于用户选择合适的网络服务并优化网络体验。
1247 1
|
JavaScript
如何在Vuex中定义和使用getters和actions
在Vuex中,`getters`用于派生状态值,类似Vue的计算属性,例如从`todos`状态中过滤已完成/未完成任务。`actions`则处理异步操作,如模拟加载数据,通过`commit`改变状态。