为什么我不能通过简单地对序列进行排序来解决最长的增长子序列?

时间:2014-01-29 16:39:11

标签: java algorithm sorting

http://en.wikipedia.org/wiki/Longest_increasing_subsequence#Efficient_algorithms说最有效的解决方案是在O(n log n)中,因此如果我对序列进行排序,它将是O(n log n)然后如果我遍历排序的序列,则拒绝每个没有增加的项目,它将是O(n),因此算法将在O(n log n + n)中,即~O(n log n)......

3 个答案:

答案 0 :(得分:2)

对序列进行排序会改变原始序列中项目的顺序,并且您的方法将始终返回与原始序列长度相同的最短序列。 Se Mehrdad的评论。

从您的链接:

二进制Van der Corput序列

0,8,4,12,2,10,6,14,1,9,5,13,​​3,11,7,15 ......

增长最快的子序列是

0,2,6,9,13,15。

现在让我们应用你的算法:

将原始序列分类为:

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

这里增长最快的是:

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

答案 1 :(得分:0)

如果你对它进行排序,那么就会破坏输入,并且无法解决真正的问题。

答案 2 :(得分:-1)

“如果我对序列进行排序” 为什么这样?排序时所有子序列会发生什么? ; - )