Qual è la complessità (big-oh) per la funzione remove()
nella classe Coda priorità in Java? Non riesco a trovare nulla di documentato da nessuna parte, penso che sia O (n), considerando che devi trovare l'elemento prima di rimuoverlo e quindi rimescolare l'albero. ma ho visto altri che non sono d'accordo e pensano che sia O (logn). Qualche idea?Elimina il tempo di complessità
risposta
La complessità per la rimozione è O (N) in quanto la complessità per la contiene è O (N) (in classe di coda con priorità di Java)
Un modo questo O può essere fatto (log N) nel proprio priorità L'implementazione della coda è di mantenere una struttura di dati ausiliari come una HashMap che mantiene i mapping da un valore nella coda di priorità alla sua posizione nella coda. Quindi, in qualsiasi momento, conoscerai la posizione dell'indice di qualsiasi valore.
Si noti che questa modifica non influisce sul tempo di esecuzione di nessuna delle operazioni esistenti: sarà necessario aggiornare solo i mapping durante le operazioni di heapify.
Quindi, se conosco la posizione dell'indice di un elemento, come lo rimuovo nell'API della coda di priorità in base all'indice? (nel tempo O (logN)) – novalain
@novalain Sfortunatamente, l'API Java non espone un modo di accedere agli elementi in una coda di priorità per indice, quindi dovrai usare la tua implementazione di una coda di priorità. –
Come mai è O (logN) rimuovere dalla nostra implementazione e non da O (1)? Sono sicuro che mi mancano alcuni dettagli, ma una coda di priorità è solo una struttura dati ordinata da priorità alta a bassa. Se è implementato utilizzando un elenco collegato e conosciamo l'indice, non possiamo semplicemente rimuovere quell'elemento e connettere il nodo precedente al nodo seguente? – user3125693
Secondo la documentazione di Oracle: "nota implementazione: questa implementazione fornisce O (log (n)) tempo per i metodi Enqueing e dequeing (offerta, sondaggio, remove() e aggiungere); tempo lineare per il metodo remove (Object) e contiene (Object) e il tempo costante per i metodi di recupero (peek, element e size). "
Penso che intendesse remove (object) not remove() il primo è O (n), il secondo è O (log n) –
'remove()' e 'poll()' sono gli stessi tranne per la semantica degli elementi mancanti. La rimozione di un elemento specifico ('remove (Object)') è 'O (n)'. Penso che la domanda non sia chiara e anche questa è una risposta valida ... – TWiStErRob
La confusione è effettivamente causato dalla funzione "remove". In Java, ci sono due funzioni di rimozione.
remove() -> Questo per rimuovere la testata/root, richiede O (logN) tempo.
remove (Object o) -> Questo è per rimuovere un oggetto arbitrario. La ricerca di questo oggetto richiede tempo O (N) e la sua rimozione richiede tempo O (logN).
- 1. Complessità del tempo di random.sample
- 2. Calcolo della complessità del tempo
- 3. Tempo complessità di questo frammento di codice
- 4. Tempo complessità del Crivello di Eratostene algoritmo
- 5. La complessità del tempo di system.out.println
- 6. La complessità del tempo di fun()?
- 7. Complessità del tempo intero in Haskell
- 8. Complessità del tempo dei metodi HashMap
- 9. Tempo complessità delle nidificato ciclo for
- 10. La complessità del tempo per java ArrayList
- 11. Tempo di complessità del rilevatore di bordo Canny
- 12. Shell vs. Confronto di complessità del tempo di Hibbard
- 13. Complessità del tempo di ricerca di un bacino
- 14. Qual è la complessità di tempo di .NET list.sort()
- 15. come calcolare la complessità del tempo di ordinamento a bolle
- 16. Larghezza Prima analisi della complessità del tempo di ricerca
- 17. La complessità del tempo di accesso a un dt Python
- 18. algoritmo di moltiplicazione della matrice complessità del tempo
- 19. Complessità di std :: conteggio
- 20. Complessità di PriorityQueue addAll()
- 21. Complessità del tempo Java O (n^2/3)
- 22. Complessità del tempo dell'algoritmo del grafico depth-first
- 23. Analisi della complessità del tempo usando big-o
- 24. complessità asintotica di printf
- 25. Object.keys() complessità?
- 26. Conte occorrenza in un elenco con il tempo la complessità di O (nlogn)
- 27. Complessità degli operatori di confronto
- 28. Algoritmo complessità
- 29. Riduzione di complessità ciclomatica
- 30. Uno strumento per il calcolo della complessità del tempo grande del codice Java?
Hai pensato di leggere Javadoc? ["questa implementazione fornisce il tempo O (log (n)) per i metodi di enqueing e dequeing (offerta, polling, remove() e add)"] (http://docs.oracle.com/javase/6/docs/api /java/util/PriorityQueue.html). – EJP
Sì, l'ho fatto. Nella riga successiva dice 'tempo lineare per la rimozione (Object) e contiene i metodi (Object); e tempo costante per i metodi di recupero (peek, element e size) ', che era il punto in cui mi stavo confondendo. Penso di aver capito ora però. – samturner