繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM