在小于O(n)的非常大的列表中查找元素

时间:2012-11-21 22:01:52

标签: haskell

我想检查一个元素是否存在于O(1)而不是O(n)的列表中(10,000,000顺序中的一个非常大的元素)。 elem x ys列表取O(n) 所以我想使用另一种数据类型/构造函数,但它必须在Prelude(不是数组);有什么建议?如果我必须建立我的数据类型会是什么样的?

还要以相同的顺序(10,000,000)对大数字列表进行排序,并在尽可能短的时间内为元素编制索引。

2 个答案:

答案 0 :(得分:6)

在O(1)时间内搜索数据集中项目的唯一方法是,如果您已经知道它在哪里,但是您不需要搜索它。对于未排序的数据,搜索是O(n)时间。对于排序数据,搜索是O(log n)时间。

答案 1 :(得分:4)

您应该使用Bloom filterHashtable。他们俩都没有出现在前奏曲中;而且,两者都依赖于Array。

唯一的选择是某种树;我建议heap。它并不难实现,它还可以免费进行排序。

更新:哎呀!我忘记了堆不提供查找。那么BST是你的选择。