0
我使用PriorityQueue
在我的代碼中擁有堆數據結構。我不想找到最低價格爲cost
的顧客。在執行過程中,客戶的成本可能會發生變化。所以我保留了所有客戶的堆。我嘗試下面的代碼 - (輸出在評論表示)HeapifyJava priorityQueue
PriorityQueue<Customer> pq = new PriorityQueue<>();
Customer c1 = new Customer(10);
Customer c2 = new Customer(20);
Customer c3 = new Customer(3);
Customer c4 = new Customer(40);
pq.add(c1);pq.add(c2);pq.add(c3);pq.add(c4);
System.out.println(pq.peek() == c3); //Prints true
c1.cost = 1;
System.out.println(pq.peek() == c1); //Prints false
雖然對象c1
的狀態改變時,堆沒有得到Heapified。基本上我想要兩條線都輸出true
。我沒有找到任何明確Heapifying堆的javadoc幫助。有人可以請幫忙,我該怎麼做/調整呢?
據我所見,這是正確的。但是,這不是優先級隊列*應該如何工作的方式。更新堆中給定的元素只需要對該元素執行heapUp/heapDown操作(取決於鍵是增加還是減少),並且運行時間爲O(log n)。然而,'remove'調用需要花費時間O(n)來查找要移除的元素......這可能無法擺脫首先使用二進制堆的目的。 – misberner 2014-11-24 11:26:25