performance optim
This commit is contained in:
parent
8ee641f310
commit
a858882f02
@ -61,35 +61,43 @@ public class BinaryHeapOpenSet implements IOpenSet {
|
|||||||
array[1].heapPosition = 1;
|
array[1].heapPosition = 1;
|
||||||
array[size] = null;
|
array[size] = null;
|
||||||
size--;
|
size--;
|
||||||
downHeap(1);
|
|
||||||
result.heapPosition = -1;
|
result.heapPosition = -1;
|
||||||
|
if (size < 2) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
int index = 1;
|
||||||
|
int smallerChild = 2;
|
||||||
|
double cost = array[index].combinedCost;
|
||||||
|
do {
|
||||||
|
int right = smallerChild + 1;
|
||||||
|
double smallerChildCost = array[smallerChild].combinedCost;
|
||||||
|
if (right <= size) {
|
||||||
|
double rightChildCost = array[right].combinedCost;
|
||||||
|
if (smallerChildCost > rightChildCost) {
|
||||||
|
smallerChild = right;
|
||||||
|
smallerChildCost = rightChildCost;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cost <= smallerChildCost) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
swap(index, smallerChild);
|
||||||
|
index = smallerChild;
|
||||||
|
smallerChild = index << 1;
|
||||||
|
} while (smallerChild <= size);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void upHeap(int index) {
|
private void upHeap(int index) {
|
||||||
int parent = index >>> 1;
|
int parent = index >>> 1;
|
||||||
while (index > 1 && array[parent].combinedCost > array[index].combinedCost) {
|
double cost = array[index].combinedCost;
|
||||||
|
while (index > 1 && array[parent].combinedCost > cost) {
|
||||||
swap(index, parent);
|
swap(index, parent);
|
||||||
index = parent;
|
index = parent;
|
||||||
parent = index >>> 1;
|
parent = index >>> 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void downHeap(int index) {
|
|
||||||
int smallerChild = 2;
|
|
||||||
while (smallerChild <= size) {
|
|
||||||
int right = smallerChild + 1;
|
|
||||||
if (right <= size && array[smallerChild].combinedCost > array[right].combinedCost) {
|
|
||||||
smallerChild = right;
|
|
||||||
}
|
|
||||||
if (array[index].combinedCost <= array[smallerChild].combinedCost) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
swap(index, smallerChild);
|
|
||||||
index = smallerChild;
|
|
||||||
smallerChild = index << 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Swaps the elements at the specified indices.
|
* Swaps the elements at the specified indices.
|
||||||
|
Loading…
Reference in New Issue
Block a user