算法设计与分析课件 28 最长上升子序列.pptxVIP

  • 3
  • 0
  • 约小于1千字
  • 约 11页
  • 2026-06-10 发布于山东
  • 举报

算法设计与分析课件 28 最长上升子序列.pptx

算法设计与分析本节要点CONTENTS最长上升子序列

最长上升子序列

(1)确定状态。dp[i]表示以a[i]结尾的最长上升子序列长度。(2)状态转移:对于1ji,若a[j]a[i],则可以将a[i]放在以a[j]结尾的最长上升序列后面,得到的长度为dp[j]+1。状态转移方程:dp[i]=max(dp[i],dp[j]+1),1ji(3)边界条件。dp[0]=0。(4)求解目标。max(dp[i])。最长上升子序列算法设计

算法实现最长上升子序列

算法分析时间复杂度:双层for循环,时间复杂度为O(n2)。空间复杂度:空间复杂度为O(n)。最长上升子序列

算法优化设置一个辅助数组d[]记录最长上升子序列,len表示最长上升子序列的长度。(1)初始化:d[1]=a[1],len=1。(2)将a[i]与d[len]比较,i=2..n。若a[i]=d[len],则什么也不做,继续下一次循环;若a[i]d[len],则将a[i]添加到d[]尾部,++len;若a[i]d[len],则将a[i]替换d[]中第1个大于等于a[i]的数。最长上升子序列

最长上升子序列

为什么可以这么做?本题求解最长上升子序列,所以对前两种情况都很容易理解。若a[i]d[len],则将a[i]替换d[]中第1个大于等于a[i]的数,这是因为在不影响d[]长度的情况

文档评论(0)

1亿VIP精品文档

相关文档