计算数组a中最长递增子序列的长度.ppt

* * * 计算数组a中的最长递增子序列的长度 问题描述 已知有 n 个整数组成的序列放在数组 a 中 顺序从 a 中任意抽出 k 个元素构成的序列 u 称为从 a 中抽取的长度为 k 的子序列 进一步, 若 u 为递增的, 则称 u 为从 a 中抽取的长度为 k 的递增子序列。 一、枚举方法 二、动态规划 两种思路 枚举出所有可能的从 a 中抽取的递增子序列, 其中那个最长者的长度即为所求。 令 i 从 1 变化到 n ; 对每个 i , 逐个考察 a 中元素, 求从 a[1]~a[i]中抽取的最长的递增子序列的长度 k 最后当 i=n 时,从 a[1]~a[i] 中抽取的最长的递增子序列的长度 k 即为所求。 第一种思想:枚举 假设已经考察了长度为 i-1 的序列 a[1]~a[i-1], 并计算出从它中间抽取的最长的递增子序列的长度为 k 向上面的序列再加一个元素 a[i] 后。 若有办法重新确定 k , 使 k 为从 i 长的序列 a[1]~a[i-1]、a[i] 中抽取的最长的递增子序列的长度,则该问题可解。 第二种思想:动态规划 当 i=2 时, 长度 i-1=1 的序列只有一项 a[1], 当然从它中抽取的最长的递增子序列就是 a[1], 其长度 k=1 。 从 i=2 开始, 逐步增加 i 值; 每当 i 增加时都重新确定 k 值; 最后当 i=n 时,

文档评论(0)

1亿VIP精品文档

相关文档