LIS-PHP O(nlogn)中最长递增子序列算法


LIS - Longest Increasing Subsequence Algorithm in PHP O(nlogn)

我在任何地方都找不到解决问题的方法:(。有人能帮我找到(或写)这个带有评论的算法吗?我自己做不到。我至少花了3个小时,什么也没花。

非常感谢!

保持向量'v[x]=y',其中y是原始序列的最小元素,它给出了长度为x的最长递增子序列。最初只有v[0] = -inf

遍历元素a的序列,使用二进制搜索在向量v中查找它。你不会精确地找到a,而是最大的x,使得v[x] <= a(<如果它是严格递增的)。因此,结束于a的最长递增子序列的长度为x+1。现在将v[x+1]更新为a(它不能小于a,否则您的搜索应该返回x+1),您可能需要扩展向量。

LIS的长度是矢量的大小。如果需要重建解决方案,请记录您使用的位置。