给定两个集合,每个集合包含整数值,如何找到一个集合,其中包含这两个集合的值的所有可能的成对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
是结果集的大小。可能有一些方法可以对源集进行分区,使用动态编程方法构建结果,或者以其他方式执行其他操作,但是现在我找不到它。
答案 0 :(得分:0)
虽然我对此并不了解,但我想知道,根据数据的基数,使用trie作为一组可以提高效率。当使用索引集遍历另一个设置为or
时,如果可以确定索引集中当前整数的位匹配,则可以跳过树的整个分支。
如果我们已经具有该长度的2 ^(n-1)个结果,则另一个优化可以是跳过所有比特长度n的配对;例如,有八个可能的整数,长度为四位。