簡體   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