![](/img/trans.png)
[英]What would be the fastest way to intersect two bitsets into a new BitSet in Java?
[英]Java: Fastest way to check if multiple bit vectors/bitsets intersect?
我在Java中有一组以BitSet形式的位向量。 我的目标是检查这些位向量是否有交集(所有至少一位中都具有1)。 我当前的解决方案是使用Java中的BitSet和提供的操作。
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
快,但它仅检查两个位向量,而不再检查。 如果有人知道如何使其更快,我将不胜感激。
我要作一些假设。 看来您将要处理10d空间中的单位向量列表。 问题是如何定义向量。 从原点开始,并在任意方向上以1个单位移动,其中相应维度的大小为1而不是0。那么所有向量都将在原点相交,如果它们是相同向量,则在无限点处相交。 向量仅用于定义线的斜率。 您还需要其他向量来定义偏移量。 您需要做的是将向量变成线,然后可以判断它们是否相交。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.