Я работаю над заданием, в котором используется минимальная куча. Удаление одного элемента очень просто.
Это мой текущий код
Item temporary = heap[0];
heap[0] = heap[--size];
heap[size] = null;
bubbleDown(0);
return temporary;
Это мой метод bubbleDown (индекс)
if(isLeaf(index)) {
return;
}
int minChild = index;
int left = getLeftIndex(index);
int right = getRightIndex(index);
if(right > heap.length) {
minChild = left;
}
else {
if(this.heap[left].compareTo(heap[index]) > 0) {
minChild = left;
}
if(this.heap[right].compareTo(heap[minChild]) < 0){
minChild = right;
}
}
if(minChild != index) {
swap(index, minChild);
bubbleDown(minChild);
}
Это работает правильно, чтобы просто удалить один элемент. Проблема заключается в том, что объекты, хранящиеся и удаляемые из кучи, должны напоминать доставку между драйверами и местоположениями. Таким образом, если бы в разных местах было 2 водителя доставки и 2 клиента, то было бы 4 возможных пары доставки, и сначала был бы удален один из них с наивысшим приоритетом. Но когда это удаляется, а не остается 3 возможных доставки, остается только 1, потому что есть только один драйвер и одно местоположение. Я понятия не имею, как начать реализацию этого. Советы / идеи будут оценены.