Java:检查多个位向量/位集是否相交的最快方法?

时间:2018-05-25 18:05:40

标签: java bitmap bit-manipulation bitwise-operators bitset

我在Java中有一个BitSet形式的位向量数组。我的目标是检查这些位向量是否有交叉点(在至少一位中都有1)。我目前的解决方案是使用BitSet在Java中提供和操作。

BitSet[] bitVecs = new BitSet[10]

//
// initialize all bit vectors and their lengths are 100 ...
//

BitSet check = new BitSet(100); //  
check.set(0, 100);
for (int i = 0; i < bitVecs.length; i++) {
    check.add(bitVecs[i]);
    if (check.isEmpty())
       return false // we know the bitVecs do not intersect
}

return true; // we know bitVecs intersects

BitSet具有intersects函数,应该比and快,但它只检查两个位向量,而不是更多。如果有人知道如何更快地做到这一点,我感激不尽。

1 个答案:

答案 0 :(得分:-1)

我要做一些假设。看起来你将要处理10d空间中的单位向量列表。问题是如何定义向量。从原点开始,在相应尺寸为1而不是0的任何方向上移动1个单位。所有向量将在原点处相交,如果它们是相同向量,则在无限点处相交。向量只是定义线的斜率。您还需要一些其他矢量来定义偏移量。您需要做的是将矢量转换为线条,然后您可以判断它们是否相交。