2010-02-06 18 views
2

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.htmlAucune garantie pour Arrays.BinarySearch?

Sun ne mentionne pas la complexité de leur implemention recherche binaire. Est-ce une erreur? Je sais que cela devrait être O(logn), mais cela me rend nerveux quand ils ne le disent pas explicitement. Ils font pour certains de leurs algorithmes, comme Arrays.sort.

L'un de vous connaît-il l'implémentation actuelle? Je n'ai pas encore eu l'occasion de télécharger le code source moi-même! Je suppose que c'est une recherche binaire triviale, mais Sun modifie parfois les algorithmes pour de meilleures performances.

+0

Plus récemment, http://java.sun.com/javase/6/docs/api/java/util/Arrays.html – trashgod

Répondre

1

L'implémentation de java.util.Array est simple et il n'y a pas de place pour des optimisations.

Vous trouverez le code source dans JAVA_HOME/src.zip. L'algorithme de tri de cette classe, requis pour l'utilisation de la recherche binaire,, est un quicksort optimisé offrant des performances n * log (n) (sur de nombreux jeux de données).

+1

"L'alogrithme de tri de cette classe, nécessaire pour utiliser la recherche binaire ...". Pour être clair, vous n'êtes pas obligé d'utiliser Array.sort (...) '. Vous pouvez vous assurer que le tableau est commandé en utilisant une technique qui fonctionne !! –

+0

Merci, c'était inexact – stacker

+0

Qu'est-ce que la complexité de l'algorithme de tri a à voir avec la complexité de 'binarySearch' de toute façon? Je peux aussi bien trier en utilisant un tri à bulles, puis trouver des éléments dans O (log n) en utilisant 'binarySearch'. – MAK

4

La recherche binaire est par définition O (log n) (en moyenne) supposez qu'il n'est pas nécessaire de le mentionner explicitement.

+0

En regardant le code même si le tableau n'est pas trié, il ne peut apparemment pas être pire que O (log n). – SyntaxT3rr0r

+2

@WizardOfOdds - mais vous obtiendrez probablement la mauvaise réponse, bien sûr. –

+2

Si le tableau n'est pas trié, le doco dit explicitement que le résultat n'est pas défini. –

1

Arrays.sort est garanti pour retourner un tableau trié, peu importe ce que votre tableau contient. (Minuscule 'b' btw) ne peut garantir rien vu que votre tableau peut être non trié. Maintenant, éditer ma réponse: en regardant le code, il n'est apparemment pas possible de faire pire que O (log n). Mais il n'y a bien sûr aucune garantie que vous aurez trouvé la bonne valeur.

0

L'un de vous connaît-il l'implémentation actuelle?

Vous pouvez trouver vous-même le code source de l'implémentation réelle dans votre installation JDK ou à l'aide d'une recherche Google. Par exemple, recherchez "java.util.Arrays.java.html".

Mais je n'ai aucun doute que les méthodes de binarySearch sont O(logN). Si ce n'était pas quelqu'un l'aurait remarqué ... au cours des 10 dernières années.