Étant donné n nombres, comment puis-je trouver le plus grand et le deuxième plus grand nombre en utilisant au plus n + log (n) des comparaisons? Notez que ce ne sont pas les comparaisons O (n + log (n)), mais vraiment n + log (n).Recherche du plus grand et du deuxième plus grand nombre de N
Répondre
pajton a fait un commentaire.
Laissez-moi élaborer.
Comme l'a dit pajton, cela peut être fait par la sélection du tournoi. Pensez à cela comme un tournoi de tennis en simple à élimination directe, où les capacités des joueurs ont un ordre strict et le résultat d'un match est décidé uniquement par cet ordre.
Au premier tour, la moitié des personnes sont éliminées. Au tour suivant une autre moitié etc (avec quelques byes possibles).
Finalement le gagnant est décidé dans le dernier et dernier tour.
Ceci peut être vu comme un arbre.
Chaque nœud de l'arbre sera le gagnant de la correspondance entre les enfants de ce nœud.
Les feuilles sont les joueurs. Le gagnant du premier tour sont les parents des feuilles, etc.
Ceci est un arbre binaire complet sur n nœuds.
Suivez maintenant le chemin du gagnant. Il y a des log n matches que le gagnant a joué. Considérez maintenant les perdants de ces correspondances log n. Le deuxième meilleur doit être le meilleur parmi ceux-là.
Le gagnant est décidé en n-1 matchs (vous en assommer un par match) et le gagnant parmi le logn est décidé en logn -1 matches. Ainsi, vous pouvez décider le plus grand et le second en n + logn-2.
En fait, il peut s'avérer que c'est optimal. Dans n'importe quel schéma de comparaison, dans le pire des cas, le gagnant devra jouer des matchs de logn.
Pour prouver que supposons un système de points où après un match, le gagnant obtient les points du perdant. Au départ, tous commencent avec 1 point chacun. A la fin, le vainqueur final a n points.
Maintenant donné n'importe quel algorithme, il pourrait être arrangé pour que le joueur avec plus de points soit toujours le gagnant. Puisque les points de n'importe quelle personne au plus doublent dans n'importe quel match dans ce scénario, vous avez besoin d'au moins n matches n joués par le gagnant dans le pire des cas.
Heh, je n'ai pas donné de réponse, car il était tard et j'allais dormir :). Vous avez fait un bon travail cependant! – pajton
@paj: Merci! J'étais juste curieux et c'était ma façon de reconnaître que vous avez répondu en premier :-) Je vais supprimer cette partie. –
Y at-il un problème avec cela? C'est au plus 3n comparaisons (sans compter la comparaison i < n
). Si vous comptez cela, c'est 4n (ou 5n dans le second exemple).
double first = -1e300, second = -1e300;
for (i = 0; i < n; i++){
if (a[i] > first){
second = first;
first = a[i];
}
else if (a[i] > second && a[i] < first){
second = a[i];
}
}
une autre façon de coder:
for (i = 0; i < n; i++) if (a[i] > first) first = a[i];
for (i = 0; i < n; i++) if (a[i] < first && a[i] > second) second = a[i];
- 1. Trouver le plus grand et le deuxième plus grand nombre de n comparaisons n + log n moyennes
- 2. Tri du plus petit au plus grand
- 3. Comptage du plus grand nombre d'éléments assignés à un utilisateur utilisant le plus grand
- 4. Calcul du nombre de lignes avec N ou plus grand nombre de bits
- 5. Javascript text animation: plus grand et plus grand, puis disparaître
- 6. Comment trouver le deuxième plus grand nombre en javascript
- 7. Déterminer un plus grand nombre et diviser
- 8. sql: en essayant de sélectionner le deuxième plus grand élément, mais sélectionne le plus grand
- 9. plus grand N par groupe avec rembourrage
- 10. Le texte du site Web plus grand et plus petit
- 11. Trouvez le plus grand facteur nombre premier?
- 12. select n plus grand utilisant LINQ
- 13. C++ Plus grand nombre de vérification
- 14. Plus grand et plus petit nombre dans un tableau
- 15. Exécution du plus grand nombre possible d'instances d'un programme
- 16. Polynomialement plus grand - confusion
- 17. Comment obtenir l'indice du plus grand nombre dans le tableau?
- 18. Mélangez un tableau plus grand nombre possible
- 19. Erreur lors de l'affichage du plus petit et le plus grand nombre
- 20. lucene plus grand que
- 21. Le plus petit nombre entier plus grand que le très grand nombre
- 22. Obtenir le plus grand nombre par ID
- 23. plus grand nombre sans opérateur conditionnel
- 24. Plus grand sur iphone
- 25. Rendre NSScroller plus grand
- 26. aide AWK trouver un plus petit nombre dans une deuxième colonne plus grand que x
- 27. Python: trouver le plus grand nombre premier de X
- 28. Identifier et étiqueter le plus grand nombre dans chaque groupe
- 29. Rendre JPanel plus grand
- 30. Sélection du plus grand nombre plus petit qu'une variable dans le tableau
Voulez-vous que l'algorithme réel, ou un indice (par exemple une sorte d'aide aux devoirs.)? –
J'aimerais voir l'algorithme actuel.Ce n'est pas un devoir, mais une question d'un de mes collègues. – Philip
Ceci est appelé algorithme de sélection de tournoi. Vous pouvez en lire plus par exemple ici: http://geeksforgeeks.org/?p=11556 – pajton