Langage C - méthode de recherche binaire

1. Scénarios d'utilisation

S'il existe un ensemble de données et que vous souhaitez interroger l'emplacement d'une donnée spécifique dans cette pile de données, vous avez alors besoin du programme pour trouver les données qui correspondent aux données cibles que vous souhaitez rechercher dans cet ensemble de données. , et puis revenez à la position correspondante. Si le problème est affiné et simplifié davantage, s'il existe un ensemble de nombres séquentiels, vous devez écrire un programme pour trouver l'emplacement de l'un des nombres. Après avoir compris les exigences, la première idée qui nous vient généralement à l'esprit est d'écrire un tableau, puis de faire correspondre les nombres un par un, et enfin de trouver la position du nombre, de revenir à cette position et de résoudre le problème.

Maintenant, mettons cette idée en pratique et voyons si nous pouvons trouver le numéro. Étant donné un tableau contenant dix éléments, qui contient 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, puis essayez de trouver la position correspondant au chiffre 7, le code est le suivant :

Le code ci-dessus utilise flag comme numéro de drapeau, car après l'avoir trouvé avec succès, break sort de la boucle et continue l'exécution. Cependant, s'il recherche un nombre qui n'existe pas dans le tableau, l'exécution de la boucle se terminera également après recherche de toutes les données ci-dessus. S'il n'y a pas de numéro d'indicateur, le programme ne peut pas déterminer la raison du saut hors de la structure de la boucle. Par conséquent, un indicateur de variable est défini pour le jugement : s'il est trouvé avec succès, la valeur de l'indicateur est 1, sinon il est 0. Le programme peut utiliser l'instruction if pour juger de quelle situation il s'agit et s'il doit afficher l'instruction dans le cas. où on ne peut pas le trouver.

Nous avons constaté que cet objectif pouvait être atteint à la fin, et nous avons réussi à trouver la position correspondante du nombre 7 dans ce nombre : 7. (Cette position fait référence à la position du nombre plutôt qu'à l'indice dans le tableau).

Cependant, bien que la position correspondante puisse être trouvée en faisant correspondre les nombres un à un, s'il y a 100, 1 000 ou même 10 000 nombres, et que l'on souhaite alors trouver la position correspondant à un nombre inférieur, cette méthode semble un peu "maladroite"" Ce n'est pas assez flexible et simple. Vous devez faire correspondre tous les nombres un par un du début à la fin jusqu'à ce que vous le trouviez. À l'heure actuelle, vous devez utiliser une méthode plus simple et plus rapide - la méthode de recherche binaire ou la méthode de recherche binaire.

2. Comment implémenter la méthode de recherche binaire

Si votre camarade de classe achetait un jour une paire de baskets et vous disait seulement que les chaussures étaient inférieures à mille, puis vous demandait de deviner le prix des chaussures, que feriez-vous ? Il peut y avoir un petit nombre de personnes qui viennent frapper cet ami, puis lui disent : "Tu ne m'as pas acheté les chaussures, mais tu m'as demandé de deviner le prix. Versailles, tu **, je *** ***" , mais la plupart des gens choisiront toujours la bonne approche : commencer à deviner à partir du milieu de 500, au lieu de simplement deviner bêtement de 1, 2, 3 à 1000 comme la méthode ci-dessus. L’idée derrière la méthode de recherche binaire est donc la même.

A partir de cet ensemble de nombres ordonnés, nous prenons la médiane et la faisons correspondre au nombre cible que nous recherchons. S'il touche l'âme d'un seul coup, nous avons directement trouvé le nombre, mais même s'il y a une forte probabilité qu'il est incorrect, nous pouvons en tuer directement la moitié.Les données. Par exemple : s'il existe un tableau de 1 à 1 000 et que le nombre cible est 777, alors ma médiane est de 500. Après comparaison, elle est plus petite que le nombre cible, ce qui signifie que la position du nombre cible ne peut être qu'à la médiane vers le haut, mais pas en dessous de 500, alors tous les nombres inférieurs à 500 seront éliminés. Cette recherche peut éliminer la moitié des données, et la méthode ci-dessus ne peut éliminer qu'un nombre à la fois, et l'efficacité est relativement faible. une lacune très évidente. Ensuite, après la première recherche, effectuez une seconde moitié de recherche et comparez avec 750. Cette fois, il est toujours plus petit que le nombre cible, mais la moitié des données est toujours supprimée. Continuez dans l'ordre et vous pourrez le trouver parmi une grande quantité. de données avec seulement quelques recherches. .

Maintenant, toujours en utilisant l'exemple ci-dessus, nous allons illustrer la méthode de recherche binaire suivante :

 Dans le code ci-dessus, un indice gauche et un indice droit sont d'abord définis pour définir l'indice médian. Après chaque recherche, si le numéro cible > la médiane, alors le numéro cible n'apparaîtra qu'au-dessus de la médiane, alors l'indice de droite n'a pas besoin d'être modifié pour le moment, et l'indice de gauche doit être l'indice de la médiane + 1. . Ajoutez à nouveau les indices gauche et droit et divisez par 2 pour obtenir la médiane des données restantes comme nouvelle médiane pour la prochaine recherche. Si le nombre cible

Le schéma de la première recherche est le suivant. Après la première recherche, nous savons que k > médiane, donc la position de k ne peut apparaître qu'à droite de la médiane. À ce stade, notre deuxième recherche veut partir de la médiane. Commencez à chercher le premier nombre à droite, donc l’indice de gauche devrait être au milieu + 1 à ce moment-là.

 La deuxième recherche est donc la suivante. On peut voir que k

 Ensuite, les recherches suivantes se déroulent comme indiqué dans la figure ci-dessus, jusqu'à ce que les indices gauche et droit soient décalés (gauche > droite) ou égaux (gauche = droite), ce qui correspond à la fin de la boucle.

 

 3. Résumé

La méthode de demi-recherche peut déterminer si la moitié de la quantité de données correspond à chaque fois et est beaucoup plus efficace que la première méthode. Le cas k = 7 est le cas avec le plus grand nombre de recherches. Il ne nécessite que quatre recherches. Cependant, la première méthode nécessite sept recherches. En comparaison, cela suffit à montrer l'efficacité de la méthode de demi-recherche.

Cependant, la méthode de recherche divisée par deux nécessite également des conditions préalables avant de pouvoir être utilisée, c'est-à-dire que l'ensemble de données à rechercher doit être dans l'ordre et que l'ordre inverse et séquentiel est acceptable. Face à des données désordonnées, la méthode de demi-recherche échoue. C'est aussi un inconvénient par rapport à la première méthode. Les deux méthodes ont leurs propres atouts et doivent être utilisées en fonction de situations différentes.

Je suppose que tu aimes

Origine blog.csdn.net/m0_69438595/article/details/127674816
conseillé
Classement