我想检查一个元素是否存在于O(1)而不是O(n)的列表中(10,000,000顺序中的一个非常大的元素)。 elem x ys
列表取O(n)
所以我想使用另一种数据类型/构造函数,但它必须在Prelude
(不是数组);有什么建议?如果我必须建立我的数据类型会是什么样的?
还要以相同的顺序(10,000,000)对大数字列表进行排序,并在尽可能短的时间内为元素编制索引。
答案 0 :(得分:6)
在O(1)时间内搜索数据集中项目的唯一方法是,如果您已经知道它在哪里,但是您不需要搜索它。对于未排序的数据,搜索是O(n)时间。对于排序数据,搜索是O(log n)时间。
答案 1 :(得分:4)
您应该使用Bloom filter或Hashtable。他们俩都没有出现在前奏曲中;而且,两者都依赖于Array。
唯一的选择是某种树;我建议heap。它并不难实现,它还可以免费进行排序。
更新:哎呀!我忘记了堆不提供查找。那么BST是你的选择。