【问题标题】:Algorithm for determining the longest increasing subsequence?确定最长增加子序列的算法?
【发布时间】:2015-09-24 10:13:30
【问题描述】:

这个问题可以通过从给定的整数数组中生成 BST 来解决。 BST 中的插入需要 O(logn)。所以 n 次插入将花费 O(nlogn)。然后可以通过仅从根开始遍历最右边的孩子来导出最长的子序列。这最多需要 O9n)。因此,总体时间复杂度将为 O(nlogn)。这是正确的做法吗?

【问题讨论】:

  • 你不会只是忘记了过程中元素的原始顺序吗?这怎么可能是远程正确的?
  • @NiklasB 如果不重新平衡树,它的结构将反映原始输入顺序。但我不确定这是否足以解决问题。而且肯定不会是 O(n log n)。
  • 娟,不会反映输入顺序!请参阅我的答案以获取反例。
  • @EmilVikström 是的,你是对的。所以这种方法根本没有意义。

标签: algorithm tree


【解决方案1】:

不,方法不正确。考虑这棵树:

    10
  2    11
 1 3
    4

显然这里最长的递增子序列是2,3,4,但您的算法会给出更短的10,11

同时,没有办法知道我的树是如何建造的。这两个序列都会给出相同的树:

10,2,1,3,4,11
10,11,2,1,3,4

这两个有不同的最长递增子序列!

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 2014-05-23
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多