最长上升子序列.ppt

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

问题14:求最长下降序列给出N个数,若ij,且AiAj,则Ai和Aj构成了下降序列。对输入的N个数,求最长下降序列长度。例如: 389,207,155,300,299,170,158,65这里最长下降序列长度为:6序列为:389,300,299,170,158,65分析设f(i)表示前i个数的最长不上升序列的长度。 则, f(i)=max{f(j)+1},其中jianda[j]a[i] 这里0ji=n。 显然时间复杂度为O(n2)。上述式子的含义:找到i之前的某j,这个数不比第i个数小,对于所有的j取f(j)的最大值。优化分析样例??这里找j,是在1~i之间进行寻找,那么我们能否快速查找到我们所要更改的j呢?要能更改需要两个条件:jianda[j]a[i]f(j)尽可能大???以上两个条件提示我们后面的值一定要小于等于前面的值。因此我们试着构建一个下降的序列。在这个下降的序列中查找可以更改的f值,使得序列的值尽可能大。i1234567838920715530029917015865f12323456具体过程:i1234567838920715530029917015865第1次389第2次389207第3次389207155第4次389300155(由于207300389,因此更新)第5次389300299(由于155299300,因此更新)第6次389300299170第7次389300299170158第8次38930029917015865思考?有些同学可能会问:对于每个f,为什么只保留一个数值呢?而对于该序列,为什么要保留较大的值呢?1. 再回过头来看方程: f(i)=max{f(j)+1},其中jianda[j]a[i] 该式子表示找前面的一个最大f的符合条件的j,因此只要保存符合条件的最大的j就可以了。在f值相同的情况下,保留较大的数显然更好。因为后面的数若能跟较小的数构成下降序列也一定能能较大的数构成下降序列,反之则不一定。例如207与300的f=2,但207不能与299构成下降序列,而300则可以。因为生成的序列为有序序列,因此我们可以采用二分查找的方法很快查找到更新的值,时间复杂度为O(n㏒n)

文档评论(0)

177****7891 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档