Ho una collezione di articoli (grandi razionali) che elaborerò. In ogni caso, l'elaborazione consisterà nel rimuovere l'elemento più piccolo nella raccolta, fare del lavoro e aggiungere 0-2 nuovi elementi (che saranno sempre più grandi dell'elemento rimosso). La raccolta verrà inizializzata con un elemento e il lavoro continuerà fino a quando non sarà vuoto. Non sono sicuro delle dimensioni che la raccolta probabilmente raggiungerà, ma mi aspetterei negli articoli da 1M a 100M. Non avrò bisogno di localizzare oggetti diversi dal più piccolo.Un albero rosso-nero è la mia struttura dati ideale?
Attualmente sto pianificando di utilizzare un albero rosso-nero, possibilmente ottimizzato per mantenere un puntatore all'elemento più piccolo. Comunque non ne ho mai usato uno prima, e non sono sicuro che il mio schema di utilizzo si adatti bene alle sue caratteristiche.
1) Esiste il pericolo che lo schema di cancellazione da sinistra + inserimento casuale influenzi le prestazioni, ad esempio richiedendo un numero significativamente maggiore di rotazioni rispetto all'eliminazione casuale? O cancellerà e inserirà le operazioni ancora O (log n) con questo schema di utilizzo?
2) Qualche altra struttura di dati mi darà prestazioni migliori, sia a causa del modello di eliminazione o sfruttando il fatto che ho sempre bisogno di trovare l'elemento più piccolo?
Aggiornamento: felice che ho chiesto, l'heap binario è chiaramente una soluzione migliore per questo caso e, come promesso, si è rivelato essere molto facile da implementare.
Hugo
A meno che non si sappia per certo che i nodi che dovrebbero essere cancellati logicamente non saranno necessari per i nuovi valori calcolati, si potrebbe desiderare di ignorare o ritardare le delezioni. Un approccio Halt & Sweep dovrebbe funzionare per quest'ultimo, dove le radici dei sub-alberi che sono diventati troppo disordinati sono visitati dal codice di riequilibrio per riequilibrare l'unità. Ciò impedisce la degenerazione lorda, pur offrendo la probabile prospettiva di prestazioni senza cancellazione. – RocketRoy