Ho un PriorityQueue contenente riferimenti ad alcuni oggetti. Quando inizialmente inserisco gli elementi nella coda di priorità, l'ordine viene mantenuto dalla struttura dei dati. Ora dopo un'operazione di rimozione aggiorno alcuni dei riferimenti che sono trattenuti dalla coda di priorità. Idealmente ciò richiede un'operazione di reheapify sulla coda di priorità, ma come è ovvio visto che sto modificando i riferimenti selezionati esternamente, non è possibile attivare una reheapify. Quindi qual è il modo migliore per assicurarmi di essere in grado di trarre il massimo vantaggio da un heap come fast extract max in presenza di modifiche a elementi arbitrari all'interno della coda? Vedo che ho bisogno di una struttura dati migliore?Reheapify java.util.PriorityQueue dopo l'aggiornamento degli elementi
Per essere più specifici ho bisogno di un'implementazione di qualcosa come un heap di Fibonacci in Java. http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm È disponibile?
Ho un'implementazione di un heap di Fibonacci in Java se sei interessato. È disponibile online all'indirizzo http://www.keithschwarz.com/interesting/code/?dir=fibonacci-heap. Spero che sia d'aiuto! – templatetypedef
Anche gli heap di fibonacci non sono resistenti alla luce delle modifiche fuori banda ai pesi degli elementi. Penso che sia necessario rimuovere un elemento prima di modificarlo e reinserirlo in seguito. –
rimuovere un elemento arbitrario dall'heap richiederà la costruzione di heap O (n), suppongo. –