Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 插入和搜索功能结构的良好选择-_Search_Data Structures_Haskell - Fatal编程技术网

Search 插入和搜索功能结构的良好选择-

Search 插入和搜索功能结构的良好选择-,search,data-structures,haskell,Search,Data Structures,Haskell,我需要一个数据结构,它支持以下操作,既节省内存又节省时间,可以假设,该值具有顺序 向结构添加值 找出结构中是否存在值 另外,结构必须是不可变的,因为我想使用Haskell 如果我不假设不变性,我可能会选择bloom过滤器 我正在对我的优化问题进行编码,因为我不能成为舒尔,无论一个条目是否已被处理,我都必须查找 通常在需要检查成员资格的情况下使用的数据结构是data.Set,它是一个基于树的集合,在O(log n)时间内提供查找和插入操作 然而,既然你提到了布鲁姆过滤器:有。因此,在您选择其他

我需要一个数据结构,它支持以下操作,既节省内存又节省时间,可以假设,该值具有顺序

  • 向结构添加值
  • 找出结构中是否存在值
另外,结构必须是不可变的,因为我想使用Haskell

如果我不假设不变性,我可能会选择bloom过滤器


我正在对我的优化问题进行编码,因为我不能成为舒尔,无论一个条目是否已被处理,我都必须查找

通常在需要检查成员资格的情况下使用的数据结构是
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中,以允许您以增量方式添加到它们。