图解:什么是最长递增子序列?

本文详细解析了寻找最长递增子序列(LIS)的问题,介绍了递归、动态规划和动态规划结合二分查找的解法。动态规划解法通过状态转移方程避免了递归的重复计算,时间复杂度为O(n^2)。进一步优化,使用动态规划结合二分查找,将时间复杂度降低到O(n log n)。
摘要由CSDN通过智能技术生成

最长递增子序列

  1. 普通动态规划问题解题四步骤 (涉及最优子结构和重叠子问题)

  2. 基于状态压缩的动态规划解题步骤

  3. 0-1背包问题

在之前的文章中,我已经给大家介绍过了动态规划的常见类型、解题步骤,以及最重要的重叠子问题和最优子结构性质,从 0-1 背包问题开始,包括今日的最长递增子序列问题都可以视作刷题,找感觉,锻炼你的敏感性!

题目描述

[LeetCode 300] 给定一个无序的整数数组,找到其中最长上升子序列的长度。

输入输出示例:

输入: [10,9,2,5,3,7,101,18]
输出: 4 
解释: 最长的上升子序列是 [2,3,7,101] 或 [2,5,7,18] 或 [2,3,7,101],它的长度是 4。

输入: [10,22,9,33,21,50,41,60,80]
输出: 6
解释: 最长的递增子序列为 [10,22,33,50,60,80]

输入: [3,5,2,8]
输出: 2
解释: 最长的递增子序列为 [3,5,8]

说明:

可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为

进阶: 你能将算法的时间复杂度降低到 吗?

最长递增子序列(Longest Increasing Subsequence,LIS ),毫无疑问,可以使用动态规划进行求解,具体为何能够用动态规划求解,去看看 普通动态规划问题解题四步骤 这篇文章就是了!不过我这里也会解释奥!

首先从输入输出示例中,你应该注意到:

其一,最长递增子序列中元素并不要求连续,例如:[2,3,7,101] 中的元素在原序列中的元素 2 和 3 在原序列中并不紧挨;

其二,最长递增子序列的组合可能有多个,并不唯一,例如:[1,1,3,2] 的最长递增子序列为 [1,2] 或 [1,3];

其三,最长递增子序列中的「递增」是「严格递增」,例如:序列[1,1,3,2] 的最长递增子序列中无重复的元素 1,因为 [1,1,2] 不是严格递增

其四,最长递增子序列中元素的相对顺序必须保持和原始序列中的元素相对顺序一致,如下图所示:

此处暂停,回忆回忆动态规划的解题步骤,自己去力扣或者本地测一测,调一调!

方法一:递归

最优子结构:设 arr[0 ... n-1] 为输入数组,L(i) 表示以 arr[i] 为结尾的最长递增子序列的长度。

比如:输入 arr[] = {3, 5, 2, 8}L(0) 表示以 arr[0] = 3 结尾的最长递增子序列 3 的长度 1L(0) = 1L(1) 表示以 arr[1] = 5 结尾的最长递增子序列 {3,5} 的长度 2L(1) = 2L(2) 表示以 arr[2] = 2 结尾的最长递增子序列 {2} 的长度 1 ,即 L(2) = 1L(3) 表示以 arr[3] = 8 结尾的最长递增子序列 {3,5,8} 的长度 3 ,即 L(3) = 3

L(i) 可以被递归地表示为如下形式:

L(i) = 1 + max( L(j) ) ,其中 arr[j] < arr[i] ;比如  L(3) = 1 + L(1) = 3  .

或者 L(i) = 1 ,不存在 arr[j] < arr[i] 的情况;比如 L(2) = 1 ,因为 arr[0] 和 arr[1] 的值均大于 arr[2] 的值。

而最终一个给定数组的 LIS 就是取值最大的 max(L(i)) ,其中

决策树流程图解是一种基本的分类与回归方法,它可以用来解决决策问题。决策树的流程图由判断模块和终止模块组成。判断模块用长方形表示,终止模块用椭圆形表示。流程图的箭头表示分支,可以链接到另一个判断模块或终止模块。决策树的生成过程中,我们需要选择最优的特征来进行切分,以得到一颗最优的决策树。为了衡量选择特征的优劣,我们引入了信息熵的概念。信息熵是衡量集合信息的度量方式,也称为香农熵。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【机器学习】决策树——ID3和C4.5(理论+图解+公式推导)](https://blog.csdn.net/m0_47256162/article/details/119929570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [决策树(基础理论篇)](https://blog.csdn.net/zz0377/article/details/114536492)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值