algorithm - 函数式语言的快速元素查找(Haskell)

标签 algorithm haskell functional-programming graph-theory

假设我们正在遍历一个图并想快速确定一个节点之前是否见过。我们有一些先决条件。

  1. 节点已用整数值 1..N 标记
  2. 图是用具有邻接表的节点实现的
  3. 从 1..N 开始的每个整数值都出现在大小为 N 的图中

以纯函数方式执行此操作的任何想法?(不允许使用哈希表或数组)。

我想要一个包含两个函数的数据结构;添加(添加遇到的整数)和查找(检查是否添加了整数)。两者都应该最好将 O(n) 时间摊销为 N 次重复。

这可能吗?

最佳答案

您可以使用 Data.Set .您可以通过使用 insert 从旧集合创建新集合并传递新集合来添加元素。您使用 member 查找元素是否是集合的成员。两个操作都是 O(log n)。

也许,您可以考虑使用状态 monad 来线程化集合的传递。

关于algorithm - 函数式语言的快速元素查找(Haskell),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/288157/

相关文章:

android - 如何向 iOS 和 Android 平台提供 C 算法库

algorithm - 不同的子序列 DP 解释

haskell - 如何从 UTCTime 中提取特定的时间分量?

haskell - 如何将 DU/ADT 限制为某些案例标识符/值构造函数

functional-programming - 什么是 "strongly moded"编程语言?

perl - 如何扩展二进制搜索迭代器以使用多个目标

java - 修复 Array out of bounds Exception New Array Exception

haskell - 以无点风格写作 f x = g x x

javascript - 这段代码有什么作用?

scala - 函数式编程中函数和方法的区别