找到两组整数的所有配对OR

  • 本文关键字:OR 整数 两组 algorithm set
  • 更新时间 :
  • 英文 :


给定两组,每个集包含整数值,如何找到一个包含这两个集合值的所有可能的 ORs的集合?例如。(所有数字都是二进制的)

{1, 10} x {100, 1000} = {101, 1001, 110, 1010}
{1, 10} x {11, 101} = {11, 101, 111}

第一个示例会产生完整的四个组合,而第二个示例仅导致三个组合,因为两组共享一些位。显然,结果可以在O(m*n)中计算,但是是否有更快的方法来解决此问题,因此,在许多情况下,结果的大小将小于m*n

在某些情况下,所得组明显小于m*n(例如{1, 11, 111} x {10, 110} = {11, 111}) - 但我无法完全以通用的方式来查明所有这些情况的确切性质,以获取算法。理想情况下,它应该在O(r)中运行,其中r是结果集的大小。可能有某种方法可以分区源集,使用动态编程方法构建结果或在该静脉中做其他事情,但是现在我找不到它。

尽管我对此一无所知,但我想知道,根据数据的基数,使用Trie进行一组可以提高效率。当将另一个集合带到索引集的or时,如果可以确定索引集中的当前整数的位,则可能会跳过树的整个分支。

另一个优化可能是如果我们已经具有该长度的2^(n-1)结果,则可以跳过Bit Length N的所有配对;例如,有八个可能的整数,长度为4位。

相关内容

最新更新