![](/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.