Maison >développement back-end >tutoriel php >Partage d'algorithme de recherche binaire de liste ordonnée PHP (demi-recherche)

Partage d'algorithme de recherche binaire de liste ordonnée PHP (demi-recherche)

小云云
小云云original
2018-02-11 09:06:191885parcourir

Cet article présente principalement l'algorithme de recherche binaire (recherche par moitié) de recherche de table ordonnée en PHP. Il présente brièvement le concept et le principe de la méthode de recherche binaire et analyse la recherche de table linéaire ordonnée en PHP basée sur l'algorithme de recherche binaire en PHP. sous forme d'exemples. Les amis qui en ont besoin peuvent se référer aux compétences opérationnelles pertinentes. J'espère que cela pourra aider tout le monde.

Introduction :

Technologie de recherche binaire, également connue sous le nom de demi-recherche. Son principe est que les enregistrements du tableau linéaire doivent être classés dans l'ordre des clés (généralement du plus petit au plus grand) et que le tableau linéaire doit être stocké de manière séquentielle.

Idée de base :

Dans une liste ordonnée, prenez l'enregistrement du milieu comme objet de comparaison Si la valeur donnée est la clé du. enregistrement du milieu S'ils sont égaux, la recherche réussit ; si la valeur donnée est inférieure à la clé de l'enregistrement du milieu, la recherche continue dans la moitié gauche de l'enregistrement du milieu si la valeur donnée est supérieure à la clé de l'enregistrement du milieu ; enregistrement, la recherche se poursuit dans la moitié droite de l'enregistrement du milieu. Répétez le processus ci-dessus jusqu'à ce que la recherche réussisse ou qu'il n'y ait aucun enregistrement dans toutes les zones de recherche et que la recherche échoue.

Code :


<?php
//二分搜索(折半查找)算法(前提是数组必须是有序数组) 时间复杂度是 O(logn)
$i = 0; //存储对比的次数
//@param 待查找数组
//@param 待搜索的数字
function binsearch($arr,$num){
 $count = count($arr);
 $lower = 0;
 $high = $count - 1;
 global $i;
 while($lower <= $high){
  $i ++; //计数器
  if($arr[$lower] == $num){
   return $lower;
  }
  if($arr[$high] == $num){
   return $high;
  }
  $middle = intval(($lower + $high) / 2);
  if($num < $arr[$middle]){
   $high = $middle - 1;
  }else if($num > $arr[$middle]){
   $lower = $middle + 1;
  }else{
   return $middle;
  }
 }
 //返回-1表示查找失败
 return -1;
}
$arr = array(0,1,16,24,35,47,59,62,73,88,99);
$pos = binsearch($arr,62);
print($pos);
echo "<br>";
echo $i;

Résultat de l'exécution :


7
3

Résumé :

La complexité temporelle de la recherche binaire est O(logn). Cependant, étant donné que la condition préalable à la recherche binaire est le stockage séquentiel d'une table ordonnée (tableau), si la table ordonnée nécessite des opérations d'insertion ou de suppression fréquentes, le maintien du tri ordonné entraînera une charge de travail considérable.

Recommandations associées :

Exemple d'analyse de l'algorithme de recherche binaire implémenté en PHP

Comment implémenter l'algorithme de recherche binaire en PHP

Exemple de code de recherche binaire PHP pour une implémentation récursive et non récursive


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!

Déclaration:
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