* `aggiungi (e e)` / `offerta (e e)` (inserzione): O (log n) - Questo perché la coda prioritaria deve mantenere la sua proprietà heap, che richiede setacciare il nuovo elemento su o giù per il mucchio.
* `remove ()` / `sondate ()` (rimozione dell'elemento prioritario più alto): O (log n) - La rimozione dell'elemento radice (priorità più alta) richiede la sostituzione con l'ultimo elemento e quindi setacciare l'elemento di sostituzione lungo il heap per ripristinare la proprietà heap.
* `peek ()` (accedendo all'elemento prioritario più alto): O (1) - Peeking all'elemento prioritario più alto (la radice del heap) è un'operazione di accesso diretto.
* `contiene (oggetto o)`: O (N) - Ciò richiede l'iteratura attraverso gli elementi della coda per verificare l'uguaglianza. PriorityQueues in Java non forniscono un modo efficiente per verificare il contenimento.
* `Rimuovi (Oggetto O)`: O (n) - Simile a `contiene ()`, ciò comporta l'iterazione attraverso gli elementi per trovare e rimuovere l'oggetto specificato. Dopo aver rimosso l'oggetto, la proprietà HEAP deve essere mantenuta, che, nel peggiore dei casi, può richiedere tempo (n). (La rimozione di un elemento arbitrario non è un'operazione di coda prioritaria standard e le prestazioni riflettono questo.)
* `size ()`: O (1) - La dimensione viene mantenuta come variabile membro, quindi accedervi è un'operazione temporale costante.
* `isEmpty ()`: O (1) - Controlla semplicemente se la dimensione è 0.
* `clear ()`: O (N) - Rimuove tutti gli elementi dalla coda. Mentre la rimozione dei singoli elementi potrebbe richiedere O (log n), la cancellazione dell'intera coda prende O (n). In alcune implementazioni, questo può effettivamente essere implementato come O (1), ripristinando l'array e le dimensioni interne.
* `iterator ()`: O (1) - Restituisce un iteratore per la coda prioritaria. L'iteratore stesso è * non * ordinato e l'iterazione attraverso gli elementi sarà O (n).
Considerazioni importanti:
* `priorityQueue` è implementato come un mucchio binario. La struttura dei dati HEAP è ciò che gli dà le prestazioni logaritmiche per l'inserimento e la rimozione dell'elemento prioritario più alto.
* Il comparatore è cruciale. Il comparatore (o l'ordinamento naturale degli elementi se non viene fornito alcun comparatore) è ciò che determina la priorità degli elementi. Il metodo `confrontatore` confrontatore () deve essere efficiente (in genere O (1)) per le operazioni di coda di priorità complessiva per mantenere la loro complessità dichiarata.
* Rimozione di elementi arbitrari (`Rimuovi (Oggetto O)`) è inefficiente. Se è necessario rimuovere gli elementi arbitrari da una coda di priorità, prendere in considerazione l'uso di una diversa struttura di dati o una combinazione di strutture di dati (ad esempio, un `albero" combinato con un `hashmap` per tracciare le posizioni degli elementi). Le code prioritarie standard sono ottimizzate per un accesso efficiente all'elemento prioritario più alto.
In sintesi:
Le operazioni chiave di `add ()` e `remove ()` (dell'elemento prioritario più alto *) sono O (log n), rendendo `priorityQueue` una scelta molto efficiente per gli scenari in cui è necessario mantenere una raccolta ordinata e accedere ripetutamente o rimuovere il minimo (o massimo, a seconda del tuo confronto).
Programmazione © www.354353.com