indices des k plus grands éléments dans un des ménagères de longueur n de la matrice de

J'ai besoin de trouver les indices des k plus grands éléments d'un non triés, de longueur n, la matrice/vecteur en C++, avec k < n. J'ai vu comment utiliser nth_element() pour trouver le k-ième statistique, mais je ne suis pas sûr si ce est le bon choix pour mon problème comme il semble que j'aurais besoin de faire des appels k à nth_statistic, je pense qu'il aurait complexité O(kn), ce qui peut être aussi bon qu'il peut l'obtenir? Ou est-il un moyen de le faire juste en O(n)?

De la mettre en œuvre sans nth_element() semble que je vais avoir à parcourir l'ensemble du tableau une fois, le remplissage d'une liste d'indices de plus grands éléments à chaque étape.

Est-il quelque chose dans la bibliothèque C++ standard qui en fait un one-liner ou de toute manière intelligente de mettre en œuvre moi-même en quelques lignes? Dans mon cas particulier, k = 3 et n = 6, donc l'efficacité n'est pas une préoccupation majeure, mais il serait bien de trouver un endroit propre et efficace pour ce faire, pour arbitraire k et n.

Il ressemble Marque les N premiers éléments d'un tableau non trié est probablement le plus proche de poster je peux trouver, les affichages, il existe en Python et PHP.

Pouvez-vous modifier le vecteur? nth_element va faire un partiel de tri en place, de sorte qu'il modifie le vecteur.
Le vecteur peut être modifié, mais le résultat final doit être les indices du vecteur d'origine) des k plus grands éléments.
C'est juste un algorithme de sélection. Généralement, vous utiliserez soit tas de sélectionner ou de sélection rapide. Voir stackoverflow.com/q/7746648/56778 pour une question similaire. Il y a une réponse avec une bonne C++ solution. (à l'aide de priority_queue)
Par ailleurs, si k=3 et n=6, alors vous êtes probablement mieux de juste trier le tableau et choisir le top 3 des articles. Comme vous le dites, l'efficacité n'est pas une préoccupation majeure, et la différence entre O(kn) et O(n) est négligeable avec ces petits nombres.

OriginalL'auteur hazelnusse | 2013-02-15