【问题标题】:what is the most appropriate data structure supporting binary search to solve LIS?支持二分查找解决 LIS 的最合适的数据结构是什么?
【发布时间】: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


    【解决方案1】:

    Data.Set 提供 insert、delete 和 lookupGT,所有这些都在 O(log n) 时间内完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      相关资源
      最近更新 更多