mirror of https://github.com/apache/lucene.git
Replace O(N^2) cost bitset clearing with O(N)
This commit is contained in:
parent
007d41c9f5
commit
684b222221
|
@ -1126,6 +1126,14 @@ public class BKDWriter implements Closeable {
|
||||||
byte[] maxSplitPackedValue = new byte[packedBytesLength];
|
byte[] maxSplitPackedValue = new byte[packedBytesLength];
|
||||||
System.arraycopy(maxPackedValue, 0, maxSplitPackedValue, 0, packedBytesLength);
|
System.arraycopy(maxPackedValue, 0, maxSplitPackedValue, 0, packedBytesLength);
|
||||||
|
|
||||||
|
// When we are on this dim, below, we clear the ordBitSet:
|
||||||
|
int dimToClear;
|
||||||
|
if (numDims - 1 == splitDim) {
|
||||||
|
dimToClear = numDims - 2;
|
||||||
|
} else {
|
||||||
|
dimToClear = numDims - 1;
|
||||||
|
}
|
||||||
|
|
||||||
for(int dim=0;dim<numDims;dim++) {
|
for(int dim=0;dim<numDims;dim++) {
|
||||||
|
|
||||||
if (dim == splitDim) {
|
if (dim == splitDim) {
|
||||||
|
@ -1152,6 +1160,9 @@ public class BKDWriter implements Closeable {
|
||||||
if (ordBitSet.get(ord)) {
|
if (ordBitSet.get(ord)) {
|
||||||
rightPointWriter.append(packedValue, ord, docID);
|
rightPointWriter.append(packedValue, ord, docID);
|
||||||
nextRightCount++;
|
nextRightCount++;
|
||||||
|
if (dim == dimToClear) {
|
||||||
|
ordBitSet.clear(ord);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
leftPointWriter.append(packedValue, ord, docID);
|
leftPointWriter.append(packedValue, ord, docID);
|
||||||
}
|
}
|
||||||
|
@ -1164,10 +1175,6 @@ public class BKDWriter implements Closeable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (numDims > 1) {
|
|
||||||
ordBitSet.clear(0, pointCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Recurse on left tree:
|
// Recurse on left tree:
|
||||||
build(2*nodeID, leafNodeOffset, leftSlices,
|
build(2*nodeID, leafNodeOffset, leftSlices,
|
||||||
ordBitSet, out,
|
ordBitSet, out,
|
||||||
|
|
Loading…
Reference in New Issue