Maison > développement back-end > tutoriel php > Exemple de code de recherche binaire PHP pour les implémentations récursives et non récursives

Exemple de code de recherche binaire PHP pour les implémentations récursives et non récursives

怪我咯
Libérer: 2023-03-13 22:52:02
original
2194 Les gens l'ont consulté

La

Recherche binaire, également connue sous le nom de demi-recherche, présente l'avantage de moins de comparaisons, une vitesse de recherche rapide et de bonnes performances moyennes. Son inconvénient est que la table à rechercher doit être ordonnée ; table, et insertionsupprimerDifficile. Par conséquent, la méthode de recherche binaire convient aux listes ordonnées qui ne changent pas fréquemment mais sont fréquemment recherchées. Tout d'abord, en supposant que les éléments du tableau sont classés par ordre croissant, comparez le mot-clé enregistré en position médiane du tableau avec le mot-clé de recherche. Si les deux sont égaux, la recherche réussit, sinon utilisez l'enregistrement en position médiane pour. divisez le tableau en deux sous-tableaux, le premier et le dernier. Si Si le mot-clé enregistré en position médiane est supérieur au mot-clé de recherche, alors le sous-tableau précédent sera recherché plus loin, sinon le sous-tableau suivant sera recherché plus loin. Répétez le processus ci-dessus jusqu'à ce qu'un enregistrement répondant aux conditions soit trouvé, ce qui rend la recherche réussie, ou jusqu'à ce que la sous-table n'existe plus, auquel cas la recherche échoue.

L'idée de base de la recherche binaire est de diviser n éléments en deux parties à peu près égales, comparer a[n/2] avec x, si x=a[n/2], trouver x, algorithme Abandonner ; si xrechercher x dans la moitié gauche du tableaua, si recherchez x dans la moitié droite du tableau a.

Ce qui suit est l'exemple de code

// 递归二分查找
$arr = [1,2,3,4,11,12,124,1245];
function bin_recur_find($arr, $beg, $end, $v) {
	if ($beg <= $end) {
		$idx = floor(($beg + $end)/2);
		if ($v == $arr[$idx]) {
			return $idx;
		} else {
			if ($v < $arr[$idx]) {
				return bin_recur_find($arr, $beg, $idx - 1, $v);
			} else {
				return bin_recur_find($arr, $idx + 1, $end, $v);
			}
		}
	}
	return -1;
}
// 非递归二分查找
function bin_find($arr, $v) {
	$beg = 0;
	$end = count($arr) - 1;
	while ($beg <= $end) {
		$idx = floor(($beg + $end)/2);
		if ($v == $arr[$idx]) {
			return $idx;
		} else {
			if ($v < $arr[$idx]) {
				$end = $idx - 1;
			} else {
				$beg = $idx + 1;
			}
		}
	}
	return -1;
}

echo bin_recur_find($arr, 0, count($arr) - 1, 100) . "\n";
echo bin_find($arr, 100) . "\n";
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!

Étiquettes associées:
source:php.cn
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