我在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
快,但它只检查两个位向量,而不是更多。如果有人知道如何更快地做到这一点,我感激不尽。
答案 0 :(得分:-1)
我要做一些假设。看起来你将要处理10d空间中的单位向量列表。问题是如何定义向量。从原点开始,在相应尺寸为1而不是0的任何方向上移动1个单位。所有向量将在原点处相交,如果它们是相同向量,则在无限点处相交。向量只是定义线的斜率。您还需要一些其他矢量来定义偏移量。您需要做的是将矢量转换为线条,然后您可以判断它们是否相交。