Maison > développement back-end > C++ > le corps du texte

Un problème dans de nombreuses implémentations de recherche binaire ?

WBOY
Libérer: 2023-09-10 16:21:08
avant
888 Les gens l'ont consulté

Un problème dans de nombreuses implémentations de recherche binaire ?

Nous savons que l'algorithme de recherche binaire est meilleur que l'algorithme de recherche linéaire. Le temps nécessaire pour exécuter cet algorithme est O(log n). Cependant, la plupart du temps, il y a des problèmes avec le code implémenté. Considérons une fonction d'algorithme de recherche binaire comme indiqué ci-dessous -

Exemple

int binarySearch(int array[], int start, int end, int key){
   if(start <= end){
      int mid = (start + end) /2); //mid location of the list
      if(array[mid] == key)
         return mid;
      if(array[mid] > key)
         return binarySearch(array, start, mid-1, key);
         return binarySearch(array, mid+1, end, key);
   }
   return -1;
}
Copier après la connexion

Cet algorithme fonctionne bien jusqu'à ce qu'il atteigne un grand nombre au début et à la fin. Si (début + fin) dépasse la valeur 232 - 1, alors un nombre négatif peut être renvoyé après le bouclage. Étant donné que les nombres négatifs ne sont pas pris en charge comme indices de tableau, cela peut poser certains problèmes.

Pour résoudre ce problème, il existe plusieurs manières différentes.

Méthode 1

int mid = start + ((end - start) / 2)
Copier après la connexion

La deuxième méthode ne fonctionne qu'en Java car il n'y a pas d'opérateur >>>

Méthode 2 (uniquement pour Java)

int mid = (start + end) >>> 1
Copier après la connexion

Puisque >>> n'est pas pris en charge en C ou C++, nous pouvons utiliser la méthode suivante.

Méthode 3

int mid = ((unsigned int) low + (unsigned int) high) >> 1
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal