Ho bisogno di trovare gli indici dei k più grandi elementi di una lunghezza non ordinata n, matrice/vettore in C++, con k < n. Ho visto come usare nth_element() per trovare la statistica k-th, ma non sono sicuro che l'uso di questo sia la scelta giusta per il mio problema in quanto sembra che avrei bisogno di effettuare k chiamate a nth_statistic, che immagino avrebbe complessità O (kn), che può essere buono come si può ottenere? O c'è un modo per farlo solo in O (n)?indici dei k più grandi elementi in una lunghezza non ordinata n array
L'implementazione senza nth_element() sembra che dovrò iterare su tutto l'array una volta, compilando un elenco di indici degli elementi più grandi ad ogni passaggio.
C'è qualcosa nella libreria standard C++ che rende questo un one-liner o un modo intelligente per implementarlo da solo in un paio di righe? Nel mio caso particolare, k = 3 e n = 6, quindi l'efficienza non è un problema enorme, ma sarebbe bello trovare un modo pulito ed efficiente per fare questo per k e n arbitrari.
Sembra che Mark the top N elements of an unsorted array sia probabilmente il post più vicino che riesco a trovare su SO, i post presenti in Python e PHP.
È possibile modificare il vettore? nth_element eseguirà un ordinamento parziale, quindi modifica il vettore. – amdn
Il vettore può essere modificato, tuttavia il risultato finale deve essere l'indice (del vettore originale) degli elementi k più grandi. – hazelnusse
Questo è solo un algoritmo di selezione. Di solito utilizzerai la selezione heap o la selezione rapida. Vedi http://stackoverflow.com/q/7746648/56778 per una domanda simile. C'è una risposta con una buona soluzione C++. (usando priority_queue) –