Search 插入和搜索功能结构的良好选择-
我需要一个数据结构,它支持以下操作,既节省内存又节省时间,可以假设,该值具有顺序Search 插入和搜索功能结构的良好选择-,search,data-structures,haskell,Search,Data Structures,Haskell,我需要一个数据结构,它支持以下操作,既节省内存又节省时间,可以假设,该值具有顺序 向结构添加值 找出结构中是否存在值 另外,结构必须是不可变的,因为我想使用Haskell 如果我不假设不变性,我可能会选择bloom过滤器 我正在对我的优化问题进行编码,因为我不能成为舒尔,无论一个条目是否已被处理,我都必须查找 通常在需要检查成员资格的情况下使用的数据结构是data.Set,它是一个基于树的集合,在O(log n)时间内提供查找和插入操作 然而,既然你提到了布鲁姆过滤器:有。因此,在您选择其他
- 向结构添加值
- 找出结构中是否存在值
我正在对我的优化问题进行编码,因为我不能成为舒尔,无论一个条目是否已被处理,我都必须查找 通常在需要检查成员资格的情况下使用的数据结构是
data.Set
,它是一个基于树的集合,在O(log n)
时间内提供查找和插入操作
然而,既然你提到了布鲁姆过滤器:有。因此,在您选择其他语言的bloom过滤器的情况下,您仍然可以在Haskell中这样做。在需要检查成员资格的情况下通常使用的数据结构是
data.Set
,它是一个基于树的集合,在O(log n)
时间内提供查找和插入操作
然而,既然你提到了布鲁姆过滤器:有。因此,在您选择其他语言的bloom过滤器的情况下,您仍然可以在Haskell中这样做。
Data.Set
确实是最简单的选择,但是如果您可以将数据结构投影到Int,那么您可以使用IntSet
来获得比Data.Set更高的效率。如果您的投影是有损的(也就是说它实际上是一个哈希),那么使用底层IntSet
(即HashSet
)的哈希表通常会更有效。正是这样一个软件包存在于Hackage上,并被标杆为相当不错:
最后,如果您需要成员身份检查,而不是提取,并且您真正关心使用最小空间,那么您可以将数据结构投影到一个整数(假设可以节省空间,这实际上取决于…),然后使用其中的一个哈希集。
数据。Set
确实是最简单的选择,但是,如果可以将数据结构投影到Int,那么可以使用IntSet
来获得比Data.Set更高的效率。如果您的投影是有损的(也就是说它实际上是一个哈希),那么使用底层IntSet
(即HashSet
)的哈希表通常会更有效。正是这样一个软件包存在于Hackage上,并被标杆为相当不错:
最后,如果您需要成员身份检查,但不需要提取,并且您真正关心使用最小空间,那么您可以将数据结构投影为整数(假设可以节省空间,这取决于…)然后使用其中的
HashSet
。请注意,bloom filter库允许您一次性构造不可变的bloom filter,但它需要在ST中才能允许您以增量方式向其添加。请注意,bloom filter库允许您一次性构造不可变的bloom filter,但它需要在ST中,以允许您以增量方式添加到它们。