最长递增子序列问题是一个很基本、较常见的小问题,但这个问题的求解方法却并不那么显而易见,需要较深入的思考和较好的算法素养才能得出良好的算法。由于这个问题能运用学过的基本的算法分析和设计的方法与思想,能够锻炼设计较复杂算法的思维,我对这个问题进行了较深入的分析思考,得出了几种复杂度不同算法,并给出了分析和证明。

一,最长递增子序列问题的描述

设L=是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=,其中k1

二,第一种算法:转化为LCS问题求解

设序列X=是对序列L=按递增排好序的序列。那么显然X与L的最长公共子序列即为L的最长递增子序列。这样就把求最长递增子序列的问题转化为求最长公共子序列问题LCS了。

最长公共子序列问题用动态规划的算法可解。设Li=,Xj=,它们分别为L和X的子序列。令C[i,j]为Li与Xj的最长公共子序列的长度。则有如下的递推方程:

这可以用时间复杂度为O(n2)的算法求解,由于这个算法上课时讲过,所以具体代码在此略去。求最长递增子序列的算法时间复杂度由排序所用的O(nlogn)的时间加上求LCS的O(n2)的时间,算法的最坏时间复杂度为O(nlogn)+O(n2)=O(n2)。

三,第二种算法:动态规划法

设f(i)表示L中以ai为末元素的最长递增子序列的长度。则有如下的递推方程:

这个递推方程的意思是,在求以ai为末元素的最长递增子序列时,找到所有序号在L前面且小于ai的元素aj,即j

public void lis(float[] L)

{int n =L.len

最长递增子序列 java_最长递增子序列问题---动态规划相关推荐

  1. 数组的最长递减子序列java_最长递增/递减子序列

    <编程之美>里有个题目是要求数组中最长递增子序列,在CSDN上看到的题目是数组中的最长递减子序列.题目如下: 求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子 ...

  2. 最长上升子序列 java_最长上升子序列 O(nlogn)解法 (java)

    最长递增子序列问题:在一列数中寻找一些数,这些数满足:任意两个数a[i]和a[j],若i 设dp[i]表示以i为结尾的最长递增子序列的长度,则状态转移方程为: dp[i] = max{dp[j]+1} ...

  3. 字典序最大子序列java_字典序最大的子序列

    链接:https://www.nowcoder.com/acm/contest/84/A 来源:牛客网 题目描述 给定字符串s,s只包含小写字母,请求出字典序最大的子序列. 子序列:https://e ...

  4. 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离

    最大子序列 最大子序列是要找出由数组成的一维数组中和最大的连续子序列.比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大:而 {5,-6,4,2}的最大子序列是{4, ...

  5. 最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和...

    最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和 文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathi ...

  6. 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...

  7. 动态规划之最长递增子序列 最长不重复子串 最长公共子序列

    [前言]动态规划:与分治法相似,即通过组合子问题来求解原问题,不同的是分治法是将问题划分为互不相交的子问题,递归求解子问题,再将他们组合起来求出原问题的解. 动态规划则应用于子问题重叠的情况,通常用来 ...

  8. 最长公共子序列、最长连续公共子序列、最长递增子序列

    面试中除了排序问题,还会经常出现字符串的子序列问题,这里讲解使用动态规划解决三个常见的子序列问题: 1.最长公共子序列问题(LCS,longest-common-subsequence problem ...

  9. 动态规划示例汇总-Java版(组合硬币、跳台阶、最小路径和、最长递增子序列、最长公共子序列、01背包问题、最小编辑代价)

    动态规划算法示例汇总-Java版 组合硬币 Java解题-暴力搜索 Java解题-记忆搜索 Java解题-动态规划(两种写法) 跳台阶 Java解题-暴力递归 Java解题-动态规划 矩阵最小路径和 ...

最新文章

  1. 4块硬盘做raid几_HP-P4500存储RAID硬盘离线数据恢复案例
  2. win10 hao123劫持html文件,Win10 edge主页被hao123劫持如何解决|edge主页被hao123劫持的解决方法...
  3. python之蓝图blueprint浅析
  4. 配置EditPlus为汇编的编辑工具
  5. HDU4686 Arc of Dream —— 矩阵快速幂
  6. 全面讲解Python字典;--什么是字典?字典的常用方法;创建空字典并赋值,增删改查字典中的元素
  7. hibernate之缓存
  8. C#趣味程序----分数之和
  9. LeetCode 7 Reverse Integer(反转数字)
  10. 都9012了,这几个公众号你还没关注?
  11. “以毒攻毒”?阿里将上线“二哈”防骚扰电话应用程序
  12. 【iOS】NSNotification 常用方法
  13. 海量数据挖掘MMDS week5: 聚类clustering
  14. snmptrap的使用方法
  15. 微信,微博,qq账号合并的大工程啊
  16. pyspark 读mysql数据_spark读mysql数据
  17. 一文看懂:网址,URL,域名,IP地址,DNS,域名解析
  18. python如何取消换行_python怎么取消换行
  19. SpringBoot2.x 配合 Redis 操作
  20. 广义item2vec的典型例子----双塔模型

热门文章

  1. Mysql运维常用命令回顾整理
  2. 星际无限 | 2021年IPFS应该关注的重点是什么?
  3. 02325计算机系统结构ppt,02325计算机系统结构2009
  4. DP(动态规划)总结
  5. css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
  6. win10开机一直转圈圈进不去系统怎么办
  7. python入门培训课程
  8. vite+vue3+axios+ts入门mockjs以及深入学习,直接一步精通
  9. 谷歌浏览器iframe兼容问题_Javascript iframe交互并兼容各种浏览器的解决方法
  10. 超分辨率的国内外研究现状