Cumuli sembrano molto adatto, e sembra che si sta andando su di esso in modo sbagliato.
detto che volevi gli elementi x top (come fa questo x confronta con n, btw?)
Quello che state facendo è mettere tutto in un max-heap e ottenere la x in alto.
Suggerisco, invece, di utilizzare un min-heap di esattamente x elementi.
I primi x elementi inseriti nell'heap.
Elemento successivo in entrata, si confronta con il minimo che può essere eseguito molto rapidamente (O (1) volta) nell'heap. Se è più piccolo, ignori semplicemente l'elemento in entrata.
Se l'elemento in entrata è più grande di min, quindi si aumenta il minimo per l'elemento in entrata e lo si spazia in basso nell'heap. Questo dovrebbe essere il momento logx nel peggiore dei casi.
Una volta fatto (nel tempo nlogx), è possibile recuperare gli elementi dal mucchio in modo ordinato in O (xlogx) tempo.
A seconda di come i dati sono al (e quanto piccolo x è), utilizzando questa soluzione min-heap può essere veramente veloce.
Se davvero vuole veramente gli inserti di essere super-veloce e non si preoccupano molto circa il recupero allora si può anche effettuare le seguenti operazioni.
inserire gli elementi in un vettore (array con O ammortizzato (1) inserire tempo) nell'ordine vengono.
L'uso l'algoritmo di selezione per trovare l'elemento X più grande (in O (n), ma le costanti potrebbero essere grande). Dire che il numero è S.
Ora piedi la matrice si confrontano ogni elemento con S e selezionare quelli grandi come S.
Se x è di dimensioni ragionevoli e paragonabile a n (come n/2 o qualcosa del genere) questo potrebbe funzionare bene, ma se x è piccolo rispetto a n, suggerirei di andare con il min-heap.
Quanti elementi? Sono persistiti ovunque, se sì, come? – Lazarus
Ulteriori informazioni sull'efficacia desiderata * inserimento *, * recupero * (di elementi prioritari) e * rimozione * in relazione tra loro. – Artelius
Desidero valutare prima gli elementi e quindi ritirare i primi x elementi con punteggio superiore nell'ordine corretto. Quindi, dato che ci sono molti inserimenti, l'inserimento dovrebbe essere piuttosto efficiente. Il retrival potrebbe essere meno efficiente. – ladi