Implémentation de la recherche binaire d'un tableau (article), Khan Academy

Supposons que nous voulons savoir si le nombre 67 est premier. Si 67 est dans le tableau, il # x27; s de premier choix.

Nous pourrions aussi savoir combien de nombres premiers sont plus petits que 67. Si nous trouvons la position du numéro 67 du tableau, nous pouvons l'utiliser pour savoir combien il existe plus petits nombres premiers.







La position d'un élément d'un tableau est connu comme son index. Les indices de tableau commencent à 0 et comptent vers le haut. Si un élément est à l'index 0, alors il est le premier élément du tableau. Si un élément est à l'index 3, il dispose de 3 éléments qui lui sont présentés dans le tableau.

En regardant l'exemple ci-dessous, on peut lire le tableau des nombres premiers de gauche à droite, un à la fois, jusqu'à ce qu'on trouve le numéro 67 (dans la boîte rose) et de voir qu'il est à l'index du tableau 18. En regardant à travers les chiffres afin que ceci est une recherche linéaire.

Une fois que nous savons que le nombre premier 67 est à l'indice 18, on peut identifier qu'il est premier. Nous pouvons également identifier rapidement qu'il ya 18 éléments qui viennent avant 67 dans le tableau, ce qui signifie qu'il ya 18 nombres premiers plus petits que 67.

pseudocode

Ici # x27; s le pseudocode pour la recherche binaire, modifié pour la recherche dans un tableau. Les entrées sont le tableau, que nous appelons tableau; le nombre n d'éléments de réseau; et la cible. le nombre recherchée. La sortie est l'indice dans le réseau de cible.

  1. Soit min = 0 et max = n-1.
  2. Calculer deviner la moyenne max et min. arrondi vers le bas (de sorte qu'il est un nombre entier).
  3. Si array [estimation] correspond à la cible. puis arrêter. Tu l'as trouvé! Retour guess.
  4. Si la conjecture était trop faible, qui est, tableau [estimation] < target. then set min = guess + 1 .
  5. Dans le cas contraire, la conjecture était trop élevé. Set max = estimation - 1.
  6. Retour à l'étape 2.






La mise en œuvre pseudocode

Il # x27, est aussi une étape importante qui manque dans ce que didn # pseudocode x27; t pour le jeu d'importance de devinettes, mais ne importe pour la recherche binaire d'un tableau. Que faut-il si le numéro que vous recherchez est pas dans le tableau? Laissez # x27; le début de par déterminer ce que l'indice de la fonction binarySearch doit revenir dans ce cas. Il doit être un nombre qui ne peut pas être un index juridique dans le tableau. Nous # x27; utiliserons -1. puisque ce ne peut pas être un index juridique en tout tableau. (En fait, un nombre négatif ferait.)

Le nombre cible ISN # x27; t dans le tableau s'il n'y a pas de suppositions possibles gauche. Dans notre exemple, supposons que nous # x27; re la recherche du numéro de cible 10 dans le tableau des nombres premiers. Si elle était là, 10 serait entre les valeurs 7 et 11, qui sont à des indices 3 et 4. Si vous tracez les valeurs d'index pour min et max que la fonction binarySearch exécute, vous constaterez que ils ont fini par arriver au point où min est égal à 3 et max est égal à 4. L'hypothèse est alors l'indice 3 (depuis (3 + 4) / 2 est égal à 3,5, et nous arrondissons vers le bas), et les nombres premiers [3] est inférieur à 10, de sorte que min devient 4. à la fois min et max 4 égal, l'estimation doit être index 4 et nombres premiers [4] est supérieur à 10. maintenant, max devient 3. Qu'est-ce que cela signifie pour min égale à 4 et max égal à 3? Cela signifie que les seules suppositions possibles sont au moins 4 et au plus 3. Il n'y a pas de tels chiffres! À ce stade, nous pouvons conclure que le nombre cible, 10, ne sont pas dans le tableau des nombres premiers, et la fonction binarySearch retournerions -1. En général, une fois max est strictement inférieur à min. nous savons que le nombre cible n'est pas dans le tableau trié. Voici modifié pour la recherche binaire pseudo-code qui gère le cas où le nombre cible n'est pas présent:

  1. Soit min = 0 et max = n-1.
  2. Si max < min. then stop: target is not present in array. Return -1 .
  3. Calculer deviner la moyenne max et min. arrondi vers le bas (de sorte qu'il est un nombre entier).
  4. Si array [estimation] correspond à la cible. puis arrêter. Tu l'as trouvé! Retour guess.
  5. Si la conjecture était trop faible, qui est, tableau [estimation] < target. then set min = guess + 1 .
  6. Dans le cas contraire, la conjecture était trop élevé. Set max = estimation - 1.
  7. Retour à l'étape 2.

Maintenant que nous # x27; ve réfléchi aux pseudocode ensemble, vous # x27; re va essayer la mise en œuvre binaire de recherche vous-même. Il # x27; s bien de regarder en arrière au pseudocode - en fait, il # x27; s une bonne chose, parce que vous # x27, aurez une meilleure compréhension de ce que signifie pour convertir un programme en pseudocode.







Articles Liés