一、说明

动态规划似乎针对问题很多,五花八门,似乎每一个问题都有一套具体算法。其实不是的,动态规划只有两类:1)针对图的路径问题 2)针对一个序列的问题。本篇讲动态规划针对序列的算法范例。

二、动态规划解决的问题

1 动态规划针对什么问题?
1)从0到N是个规模膨胀的递归问题。
2)如果f(N−1)f(N-1)f(N1)有解,那么可以推导出f(N)f(N)f(N)的解。

2 动态规划可以解决的问题特点:
1)按照规模递增的关系,凡是问题f(N)f(N)f(N)的解依赖于f(N−1)f(N-1)f(N1)的解。
2)算法从f(0)f(0)f(0)出发,能推导出f(1)f(1)f(1)的解,然后正向求解。
在这里插入图片描述
3 两类动态规划的问题
动态规划似乎针对问题很多,五花八门,每一个问题都有一套具体算法。其实不是的,动态规划只有两类:1)针对图的路径问题 2)针对一个序列的问题。
本篇讲动态规划针对序列的算法范例。

三、动态规划解决最大上升子序列问题

3.1 问题描述

问题提出:对于序列a1,a2,...ana_1,a_2,...a_na1,a2,...an找到一个最长的递增序列ai1,ai2...aika_{i_1},a_{i_2}...a_{i_k}ai1,ai2...aik,其中,i1<i2,...<ini_1<i_2,...<i_ni1<i2,...<in且,ai1<ai2...<aika_{i_1}<a_{i_2}...<a_{i_k}ai1<ai2...<aik
示例:

对于序列【 5, 2, 8 ,6, 3, 6, 9, 5 】的最长上升子序列长度:
在这里插入图片描述

答案是:
【2,3,6,9】
在这里插入图片描述

3.2 算法描述

法则:
LIS[n]=1+max{LIS[n−1]∣k<n,A[k]<A[n]}LIS[n]=1+max\{LIS[n-1]|k<n,A[k]<A[n]\}LIS[n]=1+max{LIS[n1]k<n,A[k]<A[n]}
下面对一个序列进行逐步解释:
求下列序列的最大上升子序列:
【 5, 2, 8 ,6, 3, 6, 9, 5 】

解:先命名两个序列iem和lenght,分别存储当前值和对应长度。
建立iem序列:【 5, 2, 8 ,6, 3, 6, 9, 5 】
lenght序列:
【 1, 1, 1 ,1, 1, 1, 1, 1 】

  • 预先给出每个元素初始长度为“1”

开始扫描:
step1:对序列ltem【0】元素进行扫描,由于没有前序,所以【0】的长度依然是1:length【0】=1
在这里插入图片描述
step2:对序列ltem【1】元素进行扫描,由于前序是5(大于本地的2),所以【1】的长度依然是1:length【1】=1
在这里插入图片描述
step3:对序列item【2】元素进行扫描,由于前序是5和2,小于本地的8,所以len_max(length【0】,length【1】)=1,所以,length【2】=len_max+length【2】=2
在这里插入图片描述
step4:对序列item【3】元素进行扫描,本地的6,小于本地6的前序是5和2,所以len_max(length【0】,length【1】)=1,所以,length【3】=len_max+length【3】=2
在这里插入图片描述
step5:对序列item【4】元素进行扫描,本位值3,小于本地3的前序是2,所以len_max(length【2】)=1,所以,length【4】=len_max+length【4】=2
在这里插入图片描述
step6:对序列item【5】元素进行扫描,本位值6,小于本地6的前序是【5,2.3】,所以len_max(length【0】,length【1】,length【4】)=2,所以,length【5】=len_max+length【5】=3
在这里插入图片描述
step7:对序列item【6】元素进行扫描,本位值9,小于本地6的前序是【5,2,8,6,3,6】,所以len_max(length【0】,length【1】,length【2】…)=3,所以,length【6】=len_max+length【6】=4

在这里插入图片描述
step8:对序列item【7】元素进行扫描,本位值5,小于本地5的前序是【2,3】,所以len_max(length【2】,length【3】)=2,所以,length【7】=len_max+length【7】=3
在这里插入图片描述

3.3 算法代码

用python给出整个代码:

def lis(A):L =[1]*len(A)for i in range(1,len(L)):subproblem = [ L[k] for k in range(i) if A[k]<A[i]]L[i] = 1 +max(subproblem,default=0)return max(L,default=0)

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

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

相关文章

独家|百度副总裁尚国斌即将离职,此前统筹百度地图;行业搜索及智能体业务总经理谢天转岗IDG

百度人事再变动。作者|文昌龙编辑|杨舟据「市象」了解&#xff0c;近期&#xff0c;百度副总裁尚国斌即将离职。公开资料显示&#xff0c;尚国斌2010年毕业于南开大学&#xff0c;2012年加入百度&#xff0c;先后在商业分析部、集团战略办、智能驾驶事业群工作。尚国斌同样也在…

Qt 网络编程进阶:HTTP 客户端实现

在 Qt 应用程序中&#xff0c;实现高性能、可靠的 HTTP 客户端是常见需求。Qt 提供了丰富的网络模块&#xff0c;包括 QNetworkAccessManager、QNetworkRequest 和 QNetworkReply 等类&#xff0c;用于简化 HTTP 通信。本文将深入探讨 Qt 网络编程中 HTTP 客户端的进阶实现&…

Python Requests-HTML库详解:从入门到实战

一、库简介 Requests-HTML是Python中集网络请求与HTML解析于一体的全能型库&#xff0c;由知名开发者Kenneth Reitz团队维护。它完美结合了Requests的易用性和Parsel的选择器功能&#xff0c;并内置JavaScript渲染引擎&#xff0c;特别适合现代动态网页抓取。最新版本&#xf…

基于springboot的小区车位租售管理系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

Kafka 如何优雅实现 Varint 和 ZigZag 编码

ByteUtils 是 Kafka 中一个非常基础且核心的工具类。从包名 common.utils 就可以看出&#xff0c;它被广泛用于 Kafka 的各个模块中。它的主要职责是提供一套高效、底层的静态方法&#xff0c;用于在字节缓冲区 (ByteBuffer)、字节数组 (byte[]) 以及输入/输出流 (InputStream/…

局域网 IP地址

很多童鞋搞不清楚局域网ip是什么? 什么是局域网 IP 地址? 局域网 IP 地址,也称为 私有 IP 地址(Private IP Address),是用于在局域网内部标识设备的地址。这些地址不能直接在互联网上被访问,通常由路由器自动分配,用于设备之间的内部通信。 局域网 IP 地址的分类 根…

k8s的service、deployment、探针详解

1.k8s组成图2.service和deployment的流量转发图# Deployment 定义容器端口 apiVersion: apps/v1 kind: Deployment metadata:name: myapp spec:template:spec:containers:- name: nginximage: nginxports:- containerPort: 80 # 容器监听 80name: http # 端口命名&…

【PostgreSQL教程】PostgreSQL中json类型与jsonb类型的区别

博主介绍:✌全网粉丝23W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…

牛客刷题记录01

除2&#xff01; 目录 除2&#xff01; 题目描述&#xff1a; ​编辑 题目解析&#xff1a; 代码实现&#xff1a; 数组中两个字符串的最小距离__牛客网 题目描述&#xff1a; 题目解析&#xff1a; 代码实现&#xff1a; 除2&#xff01; 题目描述&#xff1a; 给一个…

Docker Compose UI远程访问教程:结合贝锐花生壳实现内网穿透

对于很多刚接触Docker的用户来说&#xff0c;命令行操作总带着一丝“劝退感”。尤其是要在Windows上部署服务、开放端口、配置参数时&#xff0c;稍有不慎就容易出错。有没有办法像网页后台一样&#xff0c;用图形界面来管理Docker项目呢&#xff1f;答案是&#xff1a;有&…

HF83311_VB1/HF83311Q_VB1:高性能USB HiFi音频解码器固件技术解析

引言随着高品质音频体验需求的不断增长&#xff0c;音频解码器固件的性能和功能成为决定音频设备品质的关键因素。本文将介绍一款基于XMOS XU316技术的高性能USB HiFi音频解码器固件——HF83311_VB1/HF83311Q_VB1&#xff0c;这是一款专为USB HiFi音频应用设计的软件解决方案。…

[ComfyUI] -入门1-ComfyUI 是什么?比 Stable Diffusion WebUI 强在哪?

ComfyUI 是一个开源的、节点可视化界面,用于构建与执行 Stable Diffusion 图像生成流程。它把复杂的生成过程拆解为许多“节点”(如提示编码、采样器、控制网络等),用户通过连接节点,就能自由编排工作流 。这种设计适合开发者与进阶用户,更便于微调、多分支与复用流程。 …

[python][flask]flask接受get或者post参数

在 Flask 中&#xff0c;可以通过 request 对象来获取客户端通过 GET 或 POST 方法发送的参数。以下是如何在 Flask 中接收 GET 和 POST 参数的详细说明&#xff1a;1. 接收 GET 参数GET 请求的参数通常通过 URL 的查询字符串传递。例如&#xff0c;对于 URL http://example.co…

Creo 模块众多,企业如何按需灵活分配许可证资源?

在数字化设计与智能制造深入发展的当下&#xff0c;企业 CAD/CAE 工具的精细化管理越来越重要。Creo&#xff0c;作为 PTC 旗下一体化 3D CAD 平台&#xff0c;以其模块化、可扩展的产品架构&#xff0c;广泛应用于机械、装备、汽车、航空航天等行业。其丰富的模块库覆盖建模设…

【c++】提升用户体验:问答系统的交互优化实践——关于我用AI编写了一个聊天机器人……(12)

本期依旧使用豆包辅助完成代码。从功能到体验的转变上个版本已经实现了问答系统的核心功能&#xff1a;基于 TF-IDF 算法的问题匹配和回答。它能够读取训练数据&#xff0c;处理用户输入&#xff0c;并返回最相关的答案。但在用户体验方面还有很大提升空间。让我们看看改进版做…

Android UI 控件详解实践

一、UI 开发基础概念&#xff08;初学者必看&#xff09; 在学习具体控件前&#xff0c;先理解以下核心概念&#xff0c;能大幅降低后续学习难度&#xff1a; 1. View 与 ViewGroup 的关系 View&#xff1a;所有 UI 控件的基类&#xff08;如 Button、TextView&#xff09;&…

关于linux运维 出现高频的模块认知

一、Linux 基础核心&#xff08;必掌握&#xff09;核心工具&#xff1a;Shell 脚本、Systemd、用户权限管理、日志分析&#xff08;journalctl、rsyslog&#xff09;企业需求&#xff1a;中小型公司&#xff1a;需独立完成系统部署、故障排查&#xff0c;对脚本开发&#xff0…

手语式映射:Kinova Gen3 力控机械臂自适应控制的研究与应用

近日&#xff0c;美国明尼苏达大学研究团队在《从人手到机械臂&#xff1a;遥操作中运动技能具身化研究》中&#xff0c;成功开发出基于​​Kinova的7轴力控机械臂Gen3的智能控制系统。这项创新性技术通过人工智能算法&#xff0c;实现了人类手臂动作到机械臂运动的精准映射&am…

P5535 【XR-3】小道消息

题目描述 小 X 想探究小道消息传播的速度有多快&#xff0c;于是他做了一个社会实验。 有 n 个人&#xff0c;其中第 i 个人的衣服上有一个数 i1。小 X 发现了一个规律&#xff1a;当一个衣服上的数为 i 的人在某一天知道了一条信息&#xff0c;他会在第二天把这条信息告诉衣…

ChatGPT Agent架构深度解析:OpenAI如何构建统一智能体系统

引言&#xff1a;AI智能体的范式跃迁 2025年7月17日&#xff0c;OpenAI发布的ChatGPT Agent标志着对话式AI从“被动应答”向主动执行的历史性转变。这款融合Operator网页操作与Deep Research信息分析能力的新型智能体&#xff0c;通过统一架构设计实现了复杂任务的端到端自主执…