Trouver le 2ème plus grand élément dans un tableau avec le nombre minimum de comparaisons

Pour un tableau de taille N, quel est le nombre de comparaisons nécessaires?

  • Combien de stockage temporaire est-il permis?
  • Est le tableau déjà trié?
  • suppose que ce sera (n-1) comparaisons seulement. Je suis juste à la pensée de tri de l'ensemble de la liste et d'obtenir le deuxième élément de la liste
  • Montrer ton code s'il vous plaît.
  • pensez tournoi.
  • il serait n*log(n) comparaisons. Le tri ne peut pas devenir plus rapide.
  • Vous êtes de droite. Irréfléchis de moi. Merci.
  • À moins que le tableau est d'entiers. Ensuite, vous pouvez radix-genre, pas de comparaison à tous 😉
  • Même alors, cela suppose que vous connaissez les limites inférieure et supérieure sur les entiers :). Radix sort est très utile, mais très limitée. Lorsque de telles contraintes ne sont pas le problème, de son mieux pour assumer n*log(n)
  • Plus généralement, la recherche de la k-ième plus grand élément: stackoverflow.com/q/251781/98654
  • Pas de limites nécessaires: en.wikipedia.org/wiki/.... Venez pour penser à elle, un tri radix comporte encore en boucle sur les données d'entrée, et une boucle doit comporter une comparaison de la résiliation de la condition. Il n'a pas besoin d'être d'un ordre de comparaison, si, juste une comparaison d'égalité. Mais vous avez raison, la question ne dit rien sur les types de données, donc une réponse adéquate doit assumer données opaques et un comparateur de fonction. Si l'interviewer plutôt fait l'erreur de poser une int cas particulier (ou chaîne de caractères à un réel effort), c'est 0 comparaisons...
  • encore suppose que vous n'êtes pas à l'aide d'un "long" type de données (dans le cas de python), ou un BigInteger (dans le cas de C++) :). Radix sort est malheureusement limitée.
  • Un LSD radix de tri permettra de traiter de grands volumes entiers, bien que ce n'est pas ce que j'ai liée.
  • Ah, mais il vous manque un problème présent avec "long": la longueur est illimitée. La complexité de radix tri n'est pas O(n), il est O(d*n) où d est le nombre de chiffres. Si les chiffres dépasser la taille de n, alors vous avez effectué pire qu'un O(n^2) trier :P. Il n'a pas d'importance. Ceci est mon dernier commentaire sur le sujet. Radix sort est utile, mais limité 😉
  • bien sûr, mais la question n'est pas: "faites ceci dans le plus bas possible de la complexité du temps", c'est "faire le moins possible nombre de comparaisons". 0 les comparaisons gagner si possible, même si c'est O(A(d,n)) temps (la fonction d'Ackermann) 😉
  • pourquoi utilisez-vous de la fonction d'Ackermann? (J'ai cherché sur elle, mais ne pouvait pas trouver pourquoi vous avez utilisé dans le temps de la complexité du concept) 🙂
  • J'ai trouvé ceci(ajaybadgujar.com/...) la solution est très utile avec un minimum de complexité

InformationsquelleAutor nababa | 2010-09-02