O(n)时间内增长最快的子序列?

时间:2016-10-10 06:09:01

标签: python algorithm longest-substring

我是第一次研究这个算法。 CLRS(15-4.6)要求编写一个在O(n lg n)时间内运行的算法。我想出的算法似乎在O(n)中运行。我想我一定是误解了一些东西,因为即使维基百科说它应该花费O(n lg n)时间。 (https://en.wikipedia.org/wiki/Longest_increasing_subsequence
有人可以告诉我为什么这个算法(在Python中)不能正常工作或者不是O(n)或者没有回答问题吗?

"""Attempts to find maximal ordered subsequence in linear time."""

def subseq(n):
    """Assumes the elements of n are unique"""
    if len(n) == 1:
        return n[:]
    first = [n[0]]
    second = []
    for i in range(1,len(n)):
        if n[i] > first[-1]:
            second = first[:]
            first.append(n[i])
        elif not second or n[i] > second[-1]:
            first = second[:]
            first.append(n[i])
    return first

print subseq([0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15])

1 个答案:

答案 0 :(得分:0)

我将给您留下一些调试信息,但以下内容并未使用您的算法生成最大长度子字符串。我只是在您的示例中添加了一些数字,因此它应该再次生成[0, 4, 6, 9, 11, 15],但没有:

>>> print(subseq([0, 12,12,15,14 ,8, 4, 12, 14, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]))
[0, 12, 13, 15]