【问题标题】:A list with no duplicates or an ordered set没有重复的列表或有序集
【发布时间】:2013-07-08 10:38:13
【问题描述】:

是否有提供数据结构的库,它保留项目的顺序并且不包含任何重复项?这种数据结构是否存在适当的名称?

我希望它的行为类似于在每次操作后应用nub 的列表。当然,我不希望它被无效地实施。

【问题讨论】:

  • 这让我想起了Java的LinkedHashSet。所以我想类似的方法可以用于不可变的函数数据结构。
  • 如果您的类型属于Ord,您可以使用Data.Set 来写入,ordNub 采用O(n*log m),其中n 是项目数,m唯一项目的数量。如果Hashable 而不是Ord,您可以对Data.HashSet 执行相同的操作。那会不会不够低效?
  • 您好 2013,您找到解决方案了吗?
  • @ABot 我建议对列表和有序集或散列集的组合进行抽象。

标签: haskell


【解决方案1】:

这里有一个解决方案:

使用fingertreeSet 幺半群作为度量。然后在插入时,首先使用您的完整手指树的measure 检查成员资格。这会给你O(log(n)) 缺点和 snoc,O(1) 删除。

这是另一个解决方案:

将普通列表与普通Set 配对并获得基本相同的效果。你会得到更好的常数因子,但 O(log(n)) 会删除。

这是一个问题:您希望在插入重复项时发生什么?是否应该保留现有职位?新职位?优先队列可能接近您想要的,具体取决于。

【讨论】:

    【解决方案2】:

    来自ordered-containersOSet 似乎可以满足您的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-19
      • 2022-06-17
      • 2016-08-14
      • 2015-09-04
      • 2020-01-15
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多