我有一个非常大的数组存储一些数字。我的任务是查找数组中是否存在特定数字,或者是否有效。我应该选择哪种算法和数据结构?
几个假设:
我将使用C ++作为编程语言。
请建议。
由于
答案 0 :(得分:0)
使用unordered_set
进行恒定时间查找。
还有bitsets等选项。具体取决于"非常大"并且存储的值的稀疏程度与实际存在的数量相比有多少。
答案 1 :(得分:0)
似乎 unordered_set 适合您的要求。
PS:请记住这个集合中的所有元素都是不可变的
答案 2 :(得分:0)
检查元素(数字)是否为集合(数组)成员的已知最佳方法是使用bloom filters。如果set随时间变化或者在集合之间存在设置操作,则它很有效。 Bloom过滤器易于实现,并且实现良好are availble
如果set是静态的(即永不改变),好的方法是使用perfect hash function。这需要一段时间来构建,但是会胜过std :: unordered_set
提供的常用哈希函数