En utilisant les méthodes Java Les tableaux binaires de recherche

En utilisant les méthodes Java Les tableaux binaires de recherche

La classe Arrays fait partie du cadre des collections Java 2 et contient de nombreuses méthodes statiques pour représenter et manipuler des tableaux, ce qui leur permet de manipuler indépendamment des détails de leur représentation. L'article d'aujourd'hui présente la méthode binarySearch (); il utilise le binaire (ou demi-intervalle) algorithme de recherche pour trouver l'index d'un élément dans un tableau trié.







La classe Arrays fait partie du cadre des collections Java 2 et contient de nombreuses méthodes statiques pour représenter et manipuler des tableaux, ce qui leur permet de manipuler indépendamment des détails de leur représentation. Entre autres, il contient des méthodes de tri, la recherche, la copie et la toString (), qui permet de produire un tableau comme une liste formatée. L'article d'aujourd'hui présente la méthode binarySearch (); il utilise le binaire (ou demi-intervalle) algorithme de recherche pour trouver l'index d'un élément dans un tableau trié.

Comment les binaires de recherche Fonctionnement de l'algorithme

Lorsque vous travaillez avec des tableaux triés, une recherche binaire peut être beaucoup plus rapide que itérer la liste du début à la fin. Il fonctionne en itérativement ou en éliminant récursive moitié du tableau jusqu'à ce que l'élément se trouve ou toute la liste a été épuisé. Il est un peu comme 20 questions, sauf que ce sont vraiment les mêmes trois questions encore et! La classe java.util.Arrays a une version surchargée de binarySearch () pour tous les types d'objets et de variables, de sorte que, quel que soit le type que vous travaillez avec, il y a une version pour vous. Voici un exemple pour aider à clarifier:

Dire que nous avons la liste suivante des dix éléments de données CHAR:

En raison des lettres manquantes, vous ne pouvez pas deviner facilement la position de la lettre « n ». Donc, vous appelez la méthode Arrays.binarySearch (char [] a, clé de char):

Le procédé commence par la localisation de l'indice de l'élément intermédiaire, séparant ainsi les éléments du procédé dans la moitié, à quel point il y a une des trois possibilités:

  1. La position de l'élément est inférieur à l'indice à mi-chemin.
  2. La position de l'élément est supérieur à l'indice de transition.
  3. La position de l'élément est exactement à l'index à mi-chemin.

Dans ce dernier cas, l'indice de l'élément est simplement renvoyée par la fonction. Habituellement, il faut quelques itérations supplémentaires de ce procédé dans lequel la partie fendue qui pourrait contenir l'élément désiré est mis à l'essai ci-dessus.







Utilisation de la valeur point d'insertion Returned

Lorsque le réseau ne contient pas la valeur désirée, l'élément de la clé qui sera insérée dans le tableau suivant est retourné. On appelle cela le point d'insertion. Il est soit l'indice du premier élément supérieur à la clé ou la longueur du tableau, si tous les éléments du réseau sont inférieures à la clé spécifiée. Puisque les nombres entiers de 0 à la longueur moins un tableau représentent des résultats valides pour une recherche réussie, le premier point d'insertion disponible est -1. Par conséquent, le point d'insertion proprement dit est représenté sous la forme (- (point d'insertion) -1). Par exemple, si le point d'insertion d'une recherche est à l'élément 2, le point d'insertion réelle de retour sera -3. Ainsi, en ce qui concerne mon_tableau ci-dessus, le point d'insertion pour le caractère « m » serait -9 même si le point d'insertion réelle serait 8.

Ne pas essayer de trouver un algorithme de conversion pour l'instant. L'opérateur compliment (

) Convertira le point d'insertion de retour au réel pour vous. Il flips autour de sorte que les bits

2 est égal à -3 et vice versa:

Avoir le point d'insertion correcte est bien beau, mais nous avons encore à faire quelque chose avec elle. Si vous avez déjà essayé d'insérer un élément dans un tableau standard, il est pas facile. La classe ArrayList est beaucoup mieux adapté à ces opérations. Vous ne pouvez pas utiliser les médicaments génériques avec des types primitifs, donc les valeurs ombles doivent être converties en leur équivalent wrapper de caractères. Aucune conversion de chaque élément est nécessaire parce que autoboxing prend en charge que pour nous. On peut alors utiliser la méthode de complément de ArrayList (int index, la valeur de l'objet) pour ajouter le caractère « m » au point d'insertion:

Si vous souhaitez revenir à l'aide d'un tableau primitif, vous devrez suivre un processus inverse. Tout d'abord, un nouveau monTableau doit être créé avec un élément supplémentaire pour la valeur « m ». Ensuite, une boucle est utilisée pour fixer chaque élément de réseau. Encore une fois, autoboxing prend en charge la conversion du caractère char primitif:

Unique par rapport à des éléments non uniques

Si le tableau contient plusieurs éléments à la valeur spécifiée, il n'y a aucune garantie que l'on se trouve. C'est parce qu'il n'y a aucun moyen d'être sûr que plusieurs instances de la même valeur restent intactes lorsque le tableau est divisé en deux. Si vous avez des doutes que tous les éléments du tableau sont uniques, vous pouvez créer un HashSet sur une liste méthode Arrays.asList ()

Conclusion

La méthode Arrays.binarySearch () est un moyen très efficace pour rechercher et index dans une liste ordonnée. Le meilleur de tous, vous n'avez pas besoin de compter sur des bibliothèques tierces. Il suffit d'importer, la classe java.util.Arrays, et vous êtes bon pour aller. Dans un prochain article, nous allons voir comment utiliser la classe des tableaux pour trier vos listes.

Rob Gravelle réside à Ottawa, au Canada et est le fondateur de GravelleWebDesign.com. Rob a construit des systèmes pour les organisations liées au renseignement, tels que des services frontaliers du Canada, le SCRS, ainsi que pour de nombreuses entreprises commerciales. Envoyer Rob pour recevoir un devis gratuit sur votre projet de logiciel. Si vous embaucher Rob et son cabinet, vous recevrez 15% de réduction pour mentionner que vous avez entendu parler ici!

Pendant son temps libre, Rob est devenu un guitariste accompli. et a publié plusieurs CD. Son ancien groupe, Chevalier d'Ivoire, a été classé comme l'un des groupes de rock haut et métal dur du Canada par le magazine Brave Words (question n ° 92). Cliquez ici pour accéder au lien iTunes Rob.







Articles Liés