Coda di priorità con entrambe le operazioni di riduzione della chiave e di aumento della chiave


11

Un heap Fibonnaci supporta le seguenti operazioni:

  • insert(key, data) : aggiunge un nuovo elemento alla struttura dei dati
  • find-min() : restituisce un puntatore all'elemento con chiave minima
  • delete-min() : rimuove l'elemento con la chiave minima
  • delete(node) : elimina l'elemento a cui punta node
  • decrease-key(node) : diminuisce la chiave dell'elemento indicato da node

Tutte le operazioni di non cancellazione sono (ammortizzato) e le operazioni di cancellazione sono O ( registro n ) tempo ammortizzato.O(1)O(logn)

Esistono implementazioni di una coda di priorità che supportano anche increase-key(node)nel tempo (ammortizzato)?O(1)


@Raphael se aumenti la chiave dell'elemento minimo in modo che ora sia la chiave più grande, non è immediatamente ovvio (almeno per me) che non devi fare una quantità super-costante di ribilanciamento.
Joe

Risposte:


10

O(1) find-minincrease-keyinsertO(n)

vector<T>
fast_sort(const vector<T> & in) {
  vector<T> ans;
  pq<T> out;
  for (auto x : in) {
    out.insert(x);
  }
  for(auto x : in) {
    ans.push_back(*out.find_min());
    out.increase_key(out.find_min(), infinity);
  }
  return ans;
}

1
Avevo supposto che (de|in)crease-keyfacesse solo più o meno uno.
Raffaello

Esiste un DS che consente il funzionamento con tasto di aumento in tempo costante ma diminuisce in logaritmico (o più)? (Per un min-heap)
Gonzalo Solera,

2
@GonzaloSolera: la prova di impossibilità in questa risposta non tiene conto del tasto di riduzione; O (1) find-min, aumenta-chiave e inserisci sono già un problema insieme (e la dipendenza della prova dall'inserimento non è davvero necessaria; O (n) heapify è sufficiente, o probabilmente possiamo riutilizzare lo stesso heap su più ordina per dimostrare che viola i limiti di ordinamento del confronto indipendentemente dal costo di heapify o insert).
user2357112 supporta Monica il

Ok scusa, mi sono perso leggere quello. Grazie per il tuo commento!
Gonzalo Solera,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.