【发布时间】:2021-02-19 18:03:46
【问题描述】:
我想用耐心排序算法解决 Haskell 中的Longest increasing subsequence 问题。
我首先是用列表做的,它在 O(n^2) 时间内工作。
现在我想创建一个在 O(n log n) 时间内解决它的算法。为此,我需要在插入每个值 v 时获得“第一次拟合”,换句话说,在 n log n 时间内找到最后一个元素大于 v 的第一堆。 p>
data OrderedStruct = undefined -- ???
-- I need a method to remove elements in (n log n) time
popFirstBigger :: Ord a -> a -> OrderedStruct a -> (Maybe a, OrderedStruct a)
popFirstBigger a t = undefined
-- and one to insert them in (n log n) or faster
insert :: Ord a -> a -> OrderedStruct a -> OrderedStruct a
insert a t = undefined
我可以使用平衡二叉搜索树来做到这一点,但我想知道它是否存在最短路径。 例如,我可以在二分搜索中使用的任何结构都足够了。
标准Haskell中是否存在这样的数据结构(例如Seq?)
否则我可以使用哪种数据结构?
【问题讨论】:
标签: haskell time-complexity binary-search lis