performance - 查找集合成员的有效方法

标签 performance algorithm set time-complexity bitstring

我正在使用 2^n 向量,例如n=3 可能的值为:

000, 001, 010, 011, 100, 101, 110, 111

我想找到最有效的方法,给定一组组合说

000, 000, 001, 100, 000, 110, 000, 110

如何查找给定值是否在可能集中。

一种方法是遍历整个列表(蛮力)。另一种方法是使用任何经典搜索方法,例如二进制搜索等 log_2(n) +1

另一种方法是使用布隆过滤器,尽管这是一种概率方法

我想知道在给定位串列表的情况下是否还有其他任何东西可以有效地测试其成员资格。

最佳答案

任何数据结构都可以。无论您的本地字典结构是什么,我都会伸手去拿,因为这很容易做到并且是经过充分测试的代码。通常这是一个散列,尽管它通常被称为字典、HashMap 或 std::unordered_map 等其他名称。有时它是一棵二叉树。散列 (Perl)、字典 (Python)、HashMap。

如果我要推出一个“解决这个问题的完美数据结构”,我可能会希望在 trie 树上有一些变体。但从中获得的最大胜利是一个相当小的因素加速,所以除非我知道它是需要的,否则为什么要费心呢?

关于performance - 查找集合成员的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26636503/

相关文章:

c++ - 如何将unordered_set与自定义结构一起使用?

jquery - 需要 jQuery 动画的性能帮助

algorithm - 哪种数据结构最适合检查值是否在定义 block 边界的 a 和 b 之间

算法根据之前的结果调整 RNG

algorithm - 在由整数重复子串形成的字符串中有效地查找字符

java - 在n个竞争对手的比赛中安排k个位置

php - 如何命名异常(PHP)?

python - 为什么列出 `my_list+[' foo' ]` faster than ` new_list = list(my_list); python 中的 new_list.append ('foo' )`?

jQuery 选择器与过滤器()

PHP 中的 Java HashSet 等价物