ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

9.4 更多经典模型

2022-04-06 22:01:11  阅读:191  来源: 互联网

标签:num1 模型 序列 经典 9.4 长度 上升 最长 数字


yes,dp差不多只剩下最后一章的扫尾工作了,加油!
本节将介绍一些常见结构中的动态规划,序列,表达式,凸多边形和树。尽管他们的形式和解法千差万别,但都用到了动态规划的思想:从复杂的题目背景中抽象出状态表示,然后设计他们之间的转移。

9.4.1 线性结构上的动态规划

最长上升子序列问题(LIS)

设d(i)为以i结尾的最长上升子序列的长度,则d(i) = max{0, d(j)|j<i, Aj<Ai}+1,最终答案是max{d(i)},如果LIS中的相邻元素可以相等,把小于号改成小于等于号即可。上述算法的时间复杂度为O(n*n)

最长上升子序列问题复杂度为O(nlogn)的揭发思路大致是这样的
1.d[i]此时表示的不再是第i个数的最长上升子序列的值,而是表示长度为i的上升子序列的最后一个数的最小值(贪心的思想,在相同长度的情况下,肯定是长度越小其更优秀,因为这样更可能为后面的数字拼接搭建桥梁,也就是说如果现在有两个子序列1,2,3和2,3,4很明显d[3] = 3而不是4,因为无论后面的数字怎么样,肯定是相同长度下的最后一个数字越小越好

最长公共子序列问题(LCS)
最长公共子序列在一些特殊情况下可以转换为最长上升子序列问题
笔者是这样考虑的,首先我们不妨假设上下两个数组一个是num1,一个是num2
那么我们就可以为构建一个关系,让num1[i]映射到i上,然后此时num2上的数字只有出现num1上的数字那么就会有独一无二的i与其对应(如果有重复的情况,依次分配值,无法非陪就给予INF
其他不在num1之间的情况,那么我们的赋值也是INF
这样我们就可以将原先的num2上的数字转换成对应的num1上的下标,此时最长公共子序列问题就转换成了最长上升子序列问题,很明显,其时间复杂度为O(nlogn)

作者是这样给出的解答:
设d(i,j)为A1,A2,...,Ai和B1,B2和Bj的LCS的长度,则当A[i]=A[j]的时候,d(i,j) = d(i-1,j-1)+1,否则d(i,j) = max{d(i-1,j), d(i,j-1)}
时间复杂度为O(nm),其中n和m分别是序列A和B的长度

Lighting_System_Design

标签:num1,模型,序列,经典,9.4,长度,上升,最长,数字
来源: https://www.cnblogs.com/FlnButFly/p/16109766.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有