很多时候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. 在网上看到一个关于APP的测试

  2. iOS APP安全杂谈

      iOS APP安全杂谈 高小厨 · 2015/06/30 10:16 0x00 序 以前总是在这里看到各位大牛分享其安全渗透经验,而今我也很荣幸的收到了乌云的约稿,兴奋之情难以言表.由于IOS是一 ...

  3. Swift—Core Foundation框架-备

    Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Swift中调用这种C语言风格的API比较麻烦,但是在OS X和iOS开发 ...

  4. adb :unknown host service

    adb 没法重启   现象:C:\Users\John>adb shell             adb server is out of date.  killing...          ...

  5. WebService实现文件上传下载

    一:服务端:一个普通java web工程 package com.wzh.file; import com.sun.xml.ws.developer.StreamingAttachment; impo ...

  6. 系统学下POWERSHELL吧,工作当中可能用得到呢。不能像以前那样修修改改了。

    把环境,编辑器,版本这些都弄清楚,说不好还能把FCL类库弄懂个大概???:) [DateTime]::IsLeapYear(2008) $result = [DateTime]"06/21/ ...

  7. IC 小常识

    IC产品的命名规则: 大部分IC产品型号的开头字母,也就是通常所说的前缀都是为生产厂家的前两个或前三个字母,比如:MAXIM公司的以MAX为前缀,AD公司的以AD为前缀,ATMEL公司的以AT为前缀, ...

  8. How to Read an Engineering Research Paper

    How to Read an Engineering Research Paper William G. Griswold Department of Computer Science & E ...

  9. Boyang Tex上海帛扬时装面料有限公司

    Boyang Tex 上海帛扬时装面料有限公司是一家从事开发.推广销售高级时装面料的专业公司.各国高级男女时尚面料荟萃,引领时尚潮流,为国内外众多知名服饰品牌提供最 新颖时尚的高档时装面料,产品为众多 ...

  10. Tradesy | IT桔子

    Tradesy | IT桔子 Tradesy www.tradesy.com   认领 关注 分享