很多时候lis 用二分的方法比较方便 这里写一下他的原理

这里仅对严格的最长上升子序列做讨论

这里有两个数列  一个数列是 原串的数列 a1-an  另一个数列是最长上升子序列辅助数列 s数列的长度为 k, 是当前最长上升子序列长度

先来看看n*n的方法

dp[i]=max{dp[j]+1|j<i && ai>aj}

s数列是  对于当前的串  a1-ak  最长上升子序列为k  j<=k 上升子序列长度为j的子串中,第j位最小的数为sj

用类似递推的思想 顺序从a1推到an

s0=-INF(INF 指无穷大)

对于当前的数ai

k=max{dp[j]|j>=1&&j<i}

s串长度为k

sx=min{aj| j>=1&&j<i&&dp[j]=x}

从a1顺序判断道an,到第i个位置 ,如果s数列满足上文的条件,s数列的长度为k  如果ai>sk ,即a1-a(i-1)中最长上升子序列长度为k,并且第k为最小的数为sk,那么说明到当前最长上升子序列可以增加一位。那么k+=1;s(k+1)=ai;

如果第i位ai<=sk  那么他不能是最长上升子序列增加一位 ,但是,他可能更新s数列,因为如果我们发现在s数列中存在s(j-1)<ai and sj>ai

sj就应该被ai更新,因为如果不更新,那么在a1-ai串中 上升子序列长度为j的子串中 第j为最小的不是sj, 而是ai ,所以这与s串的要求是不相符的。应该用ai替换sj 使sj满足条件

所以该算法的思路应该是

我们得到一个数ai

1 如果当前s 数列的长度为0  ,则 s1=ai;

2 如果当前s数列的长度为k,

如果ai>sk 那么  我们可以吧ai 加入到s数列的末尾

如果ai<=sk 。则说明在s数列中有一个数能被更新。找到一个位置j 使s(j-1)<ai并且s(j)>=ai  用ai替换sj。否则 s数列是不合法的

因为s数列是递增的 (自己可以证明),所以找到j位置是一个log级的算法  综合起来 这就是一个n*(logn)的算法

LIS n*log(n)的理解的更多相关文章

  1. 重写console.log的一些理解

    关于重写console.log的方式通常都是这样的: console.log = (function(oriLogFunc){ return function(str) { oriLogFunc.ca ...

  2. 学习笔记:The Log(我所读过的最好的一篇分布式技术文章)

    前言 这是一篇学习笔记. 学习的材料来自Jay Kreps的一篇讲Log的博文. 原文很长,但是我坚持看完了,收获颇多,也深深为Jay哥的技术能力.架构能力和对于分布式系统的理解之深刻所折服.同时也因 ...

  3. 【BZOJ】1049: [HAOI2006]数字序列(lis+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1049 题意:给一个长度为n的整数序列.把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希 ...

  4. Log Reservation

    本文是在阅读<SQL Server Transaction Log Management>的Chapter 2: Log Internals时发现以往对Log Grows的理解比较片面,大 ...

  5. 我从来不理解JavaScript闭包,直到有人这样向我解释它...

    摘要: 理解JS闭包. 原文:我从来不理解JavaScript闭包,直到有人这样向我解释它... 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 正如标题所述,JavaScript闭包 ...

  6. 学习笔记:The Log(我所读过的最好的一篇分布式技术文章)

    前言 这是一篇学习笔记. 学习的材料来自Jay Kreps的一篇讲Log的博文. 原文非常长.可是我坚持看完了,收获颇多,也深深为Jay哥的技术能力.架构能力和对于分布式系统的理解之深刻所折服.同一时 ...

  7. 我从来不理解 JavaScript 闭包,直到有人这样向我解释它...

    正如标题所述,JavaScript 闭包对我来说一直有点神秘,看过很多闭包的文章,在工作使用过闭包,有时甚至在项目中使用闭包,但我确实是这是在使用闭包的知识. 最近看国外的一些文章,终于,有人用于一种 ...

  8. js中两个!!的理解

    在js中经常有两个!!出现,经常让人难以理解 (function () { var a = 10; var b = 20; function add(num1, num2) { var num1 = ...

  9. python 检索一个目录下所有的txt文件,并把文件改为.log

    检索一个目录及子目录下所有的txt文件,并把txt文件后缀改为log: import os f_path = r'C:\Users\PycharmProjects\mystudy\Testfolder ...

随机推荐

  1. 1109HTML学习

    <div><!--face里面用逗号隔开表示 字体优先选择.size是字体1到7 --><font color="red" face="微软 ...

  2. C语言文件操作解析(五)之EOF解析(转载)

      C语言文件操作解析(五)之EOF解析 在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of File),即文件结束符.但是很多时候对这个理解并不是很清楚,导致在写代码的时候经常出错,特 ...

  3. 转:CFile.Open()的使用说明

    在程中碰到这个一段代码: 讲的是CFILE类的文件操作,故参考MSDN系统学习一下(翻译了一下英文): CFile file;CFileException fe; //打开文件if(!file.Ope ...

  4. android ids.xml资源的使用

    ids.xml文件例子: XML file saved at res/values/ids.xml: 使用方式: 一:

  5. git “bad index file sha1 signature fatal: index file corrupt”错误

    在执行commit或revert等操作时,提示“bad index file sha1 signature fatal: index file corrupt”错误,导致操作失败.这是由于git的in ...

  6. js中()()问题

    var aa=function(){}(); var bb=(function(){})(); 今天被问到这个问题,这段js有撒区别. 总结一下,两个函数都是立即执行的意思.但是不同之处是执行的顺序, ...

  7. 【HDOJ】2722 Here We Go(relians) Again

    根据矩阵建图,然后求最短路径. #include <cstdio> #include <cstring> #include <cstdlib> #define L ...

  8. 【HDOJ】1080 Human Gene Functions

    DP.wa了一下午,原来是把mmax写在外层循环了.最近事情太多了,刷题根本没状态. #include <cstdio> #include <cstring> #include ...

  9. P2P网贷投资须谨防圈钱人

    摘要:P2P领域依然呈现投资热潮,甚至部分国有大行也有意涉足.这个行业到底怎么了?P2P平台上高收益的理财产品,到底能买不?     新年才刚刚过了10天,就有4家网贷平台被爆出支付危机,P2P一时被 ...

  10. sql Sever 修改表中的列名

    EXEC SP_RENAME 'LeInterface.iYear','iLeYear','COLUMN' EXEC SP_RENAME 'LeInterface.imonth','iLemonth' ...