Se desidero rimuovere la voce più alta nel tempo log(n)
in Java TreeSet
, io uso treeSet.pollFirst()
- qual è l'equivalente per la classe mutable.TreeSet
di Scala?Scala's TreeSet vs TreeSet di Java - sondaggio?
In ogni caso, ciò che voglio veramente è una struttura di dati di coda con priorità di heap che mi consente di usare removeMax
, add
e updatePriority
in tempo logaritmico. Ho guardato la libreria delle collezioni Scala e sono confuso - mentre lo mutable.PriorityQueue
mi lascia deque
(ovvero removeMax
) in tempo logaritmico - non fornisce alcun modo per aggiornare la priorità nel tempo di registrazione (dovrei scansionare e rimuovere la voce e aggiungere nuovamente tempo lineare). Allo stesso modo mutable.TreeSet
mi consentirebbe di aggiornare la priorità in tempo logaritmico (cancellando e riaggiustando in modo ritmato) ma non ha un'operazione removeMax
(cioè pollFirst
). Quale contenitore di collezioni dovrei usare? Per favore non mi riferire a dipendenze esterne.
Come pensate che 'updatePriority' possa funzionare con' TreeSet' di Java? – sharakan
Facile (presupponendo di aver definito un comparatore esterno sovrascrivendo TreeSet con una classe anonima). È sufficiente eliminare e aggiungere il nodo. Guarda il mio esempio Guarda la riga 19 e la riga 33-36 di qui: https://github.com/pathikrit/scalgos/blob/master/temp/SandBox/AStar.java – pathikrit
Giusto, ha senso. Dovresti rimuovere il nodo prima di aggiornarlo. – sharakan