【问题标题】:what is the best algorithm to search an array for a bit pattern using bitwise AND?使用按位 AND 在数组中搜索位模式的最佳算法是什么?
【发布时间】:2025-12-13 20:25:02
【问题描述】:

问题是计算数组 t[] 中满足条件的整数个数: 一个 & t[i] = 一个 其中 '&' 是按位与运算符,a 是给定的整数。 我可以为不同的a解决同样的问题。 假设我必须解决 Q 查询的问题:每个查询都是一个整数 a。 有没有比 O(Q x n) 更好的解决方案? (n 是 t[] 的大小)

【问题讨论】:

  • 太好了...我有一个解决方案..
  • 标题很无聊的有趣问题:也许可以更改它,以便其他用户可以识别这个问题。例如:“使用按位与在数组中搜索位模式的最佳算法是什么?”

标签: arrays algorithm data-structures bitwise-operators


【解决方案1】:

不是在最坏的情况下,如果您选择正确的输入,您可以安排每次都让整个 t 成为您的答案。

但你通常可以做得更好。

将所有t 放在一个bit-trie 中。查询只是遍历特里树,在级别 k 仅当 k 的第 k 位为 0 时才处理 0-child。以这种方式到达的所有叶子都具有它们具有的属性0 仅在a 也有零的那些位位置,这意味着它们满足
a & value == a

【讨论】:

  • 必须包括构建 trie 的成本
  • 那么,总体复杂性是多少? O(n + log(n) * Q) ?
  • @GhazouaniMedamine O(Qn) 加上额外的 O(n) 预处理。这看起来比以前更糟,但这是因为输出灵敏度。就输出而言,它是 O(所有查询的总返回项),仍然是 O(n) 预处理。
最近更新 更多