当前位置: 首页 > news >正文

从二维到一维:动态规划矩阵问题的优化之道

动态规划中的矩阵问题是非常经典的应用场景,比如最小路径和问题。这类问题很自然地可以想到使用二维 dp 数组来求解。
我们定义:
dp[i][j]
表示从矩阵的第 i行第 j列到右下角的最小路径和。

基本解法

求解过程从右下角开始,向左上角遍历,每次选择当前位置右方和下方的最小路径和来更新当前格子的状态。
状态转移方程为:
dp[i][j] = grid[i][j] + min(dp[i+1][j], dp[i][j+1])

在这里插入图片描述在这里插入图片描述

这种方法思路清晰,容易实现。然而,空间复杂度O(NM),有优化的空间。


优化空间复杂度

通过观察可以发现,每次计算某个位置时,只需要用到当前位置的右方下方的状态值。因此,我们可以用一个 一维数组 dp 来代替二维数组,从而将空间复杂度优化为 O(N)

优化方法

我们仍然从矩阵右下角开始倒序遍历。假设当前 dp 数组表示最后一行的状态,状态转移方程如下:

  1. 遍历最后一行
    因为最后一行没有下方格子,所以每个位置的状态只需要考虑右方状态:
    dp[j] = grid[i][j] + dp[j+1]

  2. 遍历最后一列
    因为最后一列没有右方格子,所以每个位置的状态只需要考虑下方状态(即当前 dp[j]):
    dp[j] = grid[i][j] + dp[j]

  3. 遍历其他位置
    对于矩阵中其他位置,需要同时参考右方和下方状态:
    dp[j] = grid[i][j] + min(dp[j], dp[j+1])

这样,dp 数组在整个计算过程中始终保持当前位置右方和下方的最小路径和。

实现代码

def minPathSum(self, grid: List[List[int]]) -> int:rows = len(grid)cols = len(grid[0])dp = grid[rows-1]for i in range(rows - 1, -1, -1):for j in range(cols - 1, -1, -1):if i == rows - 1 and j == cols - 1:continueelif i == rows - 1:dp[j] += dp[j+1]elif j == cols - 1:dp[j] += grid[i][j]else:dp[j] = min(dp[j],dp[j+1])+grid[i][j]return dp[0]

类似题目

不同路径
不同路径II
三角形最小路径和

相关文章:

从二维到一维:动态规划矩阵问题的优化之道

动态规划中的矩阵问题是非常经典的应用场景,比如最小路径和问题。这类问题很自然地可以想到使用二维 dp 数组来求解。 我们定义: dp[i][j] 表示从矩阵的第 i行第 j列到右下角的最小路径和。 基本解法 求解过程从右下角开始,向左上角遍历&am…...

计算机视觉(CV):让机器看懂世界

引言 计算机视觉(Computer Vision, CV)是人工智能的重要领域,致力于让机器能够“看懂”世界。CV技术广泛应用于自动驾驶、医疗影像、安防监控和娱乐领域,正在改变我们的生活方式。 本文将从基本概念、技术方法、应用场景和发展方向…...

记录下,用油猴Tampermonkey监听所有请求,绕过seesion

油猴Tampermonkey监听所有请求,绕过seesion 前因后果脚本编写 前因后果 原因是要白嫖一个网站的接口,这个接口的页面入口被隐藏掉了,不能通过页面调用,幸好之前有想过逆向破解通过账号密码模拟登录后拿到token,请求该…...

服务器产品

一 存储产品 3.1 3PAR 3.2 X10000 3.3 SAN Switch 3.4 Nimble 3.5 SimpliVity 3.6 XP 3.7 MSA 3.8 StoreOnce 3.9 StoreEver 3.10 StoreBlade 3.11 StoreEasy(WindowsNAS) 3.12 JBOD 3.13 CB 二 服务器产品 4.1 红牌服务器 4.1.1 红牌…...

pyhton django web集群基于linux定时任务

基于django management/commands目录下的脚本 from django.core.management import BaseCommand import logging import uuid from pia.utils.cache import reset_redis_expire from pia.utils.reids_key import TASK_KEYlogging logging.getLogger(task)""" …...

探索 Python 字典的奥秘:Future 对象为何能成为字典的键?

本质在于作为字典的key能不能执行hash(key) 问题 import concurrent.futuresdef task(n):return n * n# 创建一个线程池 with concurrent.futures.ThreadPoolExecutor() as executor:# 提交任务并获取 Future 对象future_to_num {executor.submit(task, i): i for i in rang…...

多品牌摄像机视频平台EasyCVR视频融合平台+应急布控球:打造城市安全监控新体系

在当今快速发展的智慧城市和数字化转型浪潮中,视频监控技术已成为提升公共安全、优化城市管理、增强应急响应能力的重要工具。EasyCVR视频监控平台以其强大的多协议接入能力和多样化的视频流格式分发功能,为用户提供了一个全面、灵活、高效的视频监控解决…...

Spark 中 RDD checkpoint 是通过启动两个独立的 Job 完成的。

在 Spark 中,RDD checkpoint 是通过启动两个独立的 Job 完成的。这两个 Job 分别用于生成 checkpoint 数据和更新依赖关系。下面从源码角度深入分析这个机制。 1. 为什么需要两个 Job? 当调用 RDD.checkpoint() 后: 第一个 Job:…...

如何下载TikTok视频没有水印

随着短视频平台的普及,TikTok(抖音国际版)成为了全球最受欢迎的社交媒体平台之一。它吸引了无数创作者发布自己的短视频内容,内容涵盖了舞蹈、搞笑、挑战、教程、旅行等各个方面。与此用户也常常希望能够下载自己喜欢的TikTok视频…...

天童美语:提升孩子的自信心的方法

每个孩子都渴望展翅高飞,但在成长的旅途中,难免会遇到风雨。不自信,就像一层薄雾,有时悄悄笼罩在孩子心头,阻碍了他们向阳而生的脚步。宁波天童教育认为,身为家长,我们的使命不仅是孩子的庇护伞…...

【网络编程】字节序:大端序和小端序

端序(Endianness),又称字节顺序,又称尾序,在计算机科学领域中,指存储器中或在数字通信链路中,组成多字节的字的字节的排列顺序。 在几乎所有的机器上,多字节对象都被存储为连续的字…...

视频融合×室内定位×数字孪生

随着物联网技术的迅猛发展,室内定位与视频融合技术在各行各业中得到了广泛应用。不仅能够提供精确的位置信息,还能通过实时视频监控实现全方位数据的可视化。 与此同时,数字孪生等技术的兴起为智慧城市、智慧工厂等应用提供了强大支持&#…...

RK3568平台开发系列讲解(platform虚拟总线驱动篇)注册 platform 驱动

🚀返回专栏总目录 文章目录 一、注册 platform 驱动二、platform_driver 结构体沉淀、分享、成长,让自己和他人都能有所收获!😄 一、注册 platform 驱动 platform_driver_register 函数用于在 Linux 内核中注册一个平台驱动程序。 下面是对该函数的详细介绍: 函数原型…...

Jmeter进阶篇(26)杀掉Tomcat的几种方法

📚Jmeter性能测试大全:Jmeter性能测试大全系列教程❤,这里有你想要的一切,欢迎订阅哦~ 📚前言 Tomcat 是一个广泛使用的开源 Java Servlet 容器,用于部署和运行 Java Web 应用程序。在我们进行压测测试过程中,很可能遇到被测系统崩溃,需要我们来操作一下子Tomcat的情…...

Solana 区块链的技术解析及未来展望 #dapp开发#公链搭建

随着区块链技术的不断发展和应用场景的扩展,性能和可拓展性成为各大公链竞争的关键因素。Solana(SOL)因其高吞吐量、低延迟和低成本的技术特性,在众多区块链项目中脱颖而出,被誉为“以太坊杀手”之一。本文将从技术层面…...

SMO算法-核方法支持向量机

​ 我们现在的问题是要优化目标函数,同时求出参数向量 α \alpha α P m i n ⏟ α 1 2 ∑ i 1 , j 1 m α i α j y i y j K ( x i , x j ) − ∑ i 1 m α i s . t . ∑ i 1 m α i y i 0 0 ≤ α i ≤ C P\underbrace{ min }_{\alpha} \frac{1}{2}\sum\li…...

Java项目实战II基于微信小程序的科创微应用平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着科技的…...

HTTP代理是什么,有什么用?

在互联网的世界里,数据采集已经成为许多企业和个人获取信息的重要手段。而在这个过程中,HTTP代理则是一个不可或缺的工具。那么,HTTP代理究竟是什么?它在数据采集中又有什么用呢?今天,我们就来深入探讨一下…...

Postman之newman

Postman之newman 1.基础环境node安装1.1.配置环境变量1.2.安装newman和html报告组件 2.newman运行 newman可以理解为,没有命令行的postman,把写好的测试脚本直接在命令行中运行,newman依赖于node环境,因此,需要先安装好…...

数据库查询表结构和数据量以及占用空间

数据库查询表结构和数据量以及占用空间 数据库查询表结构 mysql SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIMUM_LENGTH 长度, IS_NULLABLE 是否为空, COLUMN_DEFAULT 默认值, COLUMN_COMMENT 备注 FROM INFORMATION_SC…...

联邦学习与RAG融合:构建隐私保护的分布式智能问答系统

1. 项目概述:当联邦学习遇上检索增强生成最近在折腾一个挺有意思的开源项目,叫fed-rag,来自 Vector Institute。光看名字,老司机们大概就能猜出个七七八八了:这玩意儿是把联邦学习和检索增强生成给揉到一块儿去了。我花…...

OpenClaw本地控制台:一站式图形化管理AI助手工作流

1. 项目概述:一个为本地OpenClaw工作流量身打造的控制台如果你和我一样,在Windows上折腾过OpenClaw,那你肯定经历过这种“精神分裂”式的管理体验:想启动服务,得切到终端敲命令;要改个模型配置,…...

计算内存(CIM)技术解析与AI硬件加速实践

1. 计算内存(CIM)技术解析:突破传统架构的能效瓶颈 在AI硬件加速领域,计算内存(Compute-in-Memory, CIM)正引发一场架构革命。传统冯诺依曼架构中"内存墙"问题已成为制约AI计算效率的主要瓶颈——…...

MCP2MQTT 完全指南:用 AI 自然语言控制硬件设备的开源 MCP 工具

前言 2025年4月,MCP2Everything 团队正式开源MCP2MQTT,这是全球首个将 MCP(模型上下文协议)与 MQTT 物联网协议无缝桥接的开源工具,彻底打通了 AI 大模型与物理硬件之间的"最后一公里"。无需编写任何胶水代码…...

Python自动化交易:Kalshi预测市场API封装与量化策略实践

1. 项目概述:一个为Kalshi预测市场打造的自动化工具箱如果你对预测市场感兴趣,或者正在寻找一种程序化的方式来管理你在Kalshi平台上的交易活动,那么你可能会对这个名为kalshi-skill的项目产生共鸣。简单来说,这是一个基于Python的…...

芯片入门必看:CPU、MCU、SoC、GPU、TPU、NPU

本文首先介绍了芯片的基础分类,包括模拟/数字芯片和逻辑/计算芯片。接着,对8类核心芯片进行了通俗解析,包括CPU、MCU、SoC、GPU、TPU、NPU、FPGA和DSP,涵盖了它们的定义、用途、类型和代表性标的。最后,文章从通用性和…...

避坑指南:海康威视工业相机SDK二次开发常见问题排查(从环境配置到图像采集)

海康威视工业相机SDK开发实战:从环境搭建到图像处理的深度避坑指南 工业视觉领域的开发者们,是否曾在深夜调试海康威视相机SDK时,被突如其来的"DLL缺失"错误打断思路?或是明明按照文档配置了项目属性,却始终…...

JPlag代码抄袭检测:17种编程语言的智能原创守护者

JPlag代码抄袭检测:17种编程语言的智能原创守护者 【免费下载链接】JPlag State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs. 项目地址: https://gitcode.com/gh_mirrors/jp/JPlag 在数字化教…...

TinyTroupe:轻量级智能体协作范式与确定性AI工程实践

1. 项目概述:这不是另一个“小模型”,而是一套轻量级智能体协作范式你可能已经看过不少标题带“Tiny”“Mini”“Lite”的AI项目,它们大多是在说“把大模型压缩一下,跑在手机上”。但 Microsoft 的TinyTroupe完全不是这个路数——…...

为OpenClaw智能体工作流配置Taotoken作为统一的模型调用后端

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为OpenClaw智能体工作流配置Taotoken作为统一的模型调用后端 对于使用OpenClaw框架构建AI智能体的开发者而言,一个稳定…...