2009-05-29 5 views

risposta

3

Sono felice di segnalare che Boost ora ha aggiunto uno Boost.Heap library con un numero di stellar data structures.

Il vantaggio di questo è che gli heap di Fibonacci supportano la modifica della priorità in tempo di ammortamento costante.

Sfortunatamente, tutti gli heap mutabili sono basati su nodi (in altre parole, hanno un'indirizzamento extra come suggerito da @wilx). @ La risposta di Feruccio agli "ammassi mutabili" di Boost ha un codice che permette di scrivere ammassi mutevoli basati su vettori se sei disposto ad avere dei puntatori alle maniglie contenute nel tuo tipo di valore.

2

Sembra che tu abbia bisogno di più indirezione. Memorizza il puntatore agli eventi nella coda di priorità. Quando la priorità di alcuni elementi della coda cambia, rimuoverla e reinserirla.

10

Dai uno sguardo a Boost's mutable heaps.

+0

Grazie, se finisco per dover stampare il mio, userò lo snippet per iniziare. –

+1

è finito con questa soluzione –

+1

@Ferruccio Grazie, ho salvato i miei buoni 45 minuti e alcuni bug. –

0

Un avvertimento è che si finisce con l'evento instabile l'ordinamento, cioè ordinamento degli eventi con la stessa priorità non è definito (leggi 'saranno riordinati'.)

+1

È possibile rimuovere un elemento arbitrario da un heap nel tempo log (n). –

+0

Sì, hai ragione, stava pensando a qualcos'altro :) –

+0

nessun problema :) –