ホームページ  >  記事  >  バックエンド開発  >  PHP 順序付きリスト二分探索 (半探索) アルゴリズムの共有

PHP 順序付きリスト二分探索 (半探索) アルゴリズムの共有

小云云
小云云オリジナル
2018-02-11 09:06:191852ブラウズ

この記事では、主に PHP 順序付きテーブル検索の二分探索 (半探索) アルゴリズムを紹介し、二分探索法の概念と原理を簡単に紹介し、二分探索アルゴリズムに基づいて PHP の順序付き線形テーブル検索の相関を分析します。必要な方の操作スキルの参考になれば幸いです。

概要:

二分探索技術。ハーフサーチとも呼ばれます。その前提として、線形テーブル内のレコードはキーの順序 (通常は小さいものから大きいものへの順序) である必要があり、線形テーブルは順番に格納される必要があります。

基本的な考え方:

順序付きリストでは、指定された値が中央のレコードのキーと等しい場合、検索は成功します。指定された値が中央のレコードのキーより大きい場合は、中央のレコードの左半分で検索を続けます。指定された値が中央のレコードのキーより大きい場合は、中央のレコードの右半分で検索を続けます。検索が成功するか、すべての検索領域にレコードがなく検索が失敗するまで、上記のプロセスを繰り返します。

コード:


<?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;

実行結果:


7
3

概要:

二分探索の時間計算量はO (ログイン) 。しかし、二分探索では順序付きテーブル(配列)を順次格納することが前提となるため、順序付きテーブルに対して頻繁に挿入や削除操作が必要な場合、順序付きソートの維持には多大な負荷がかかります。

関連する推奨事項:

PHP で実装された二分探索アルゴリズムの分析例

PHP で二分探索アルゴリズムを実装する方法

php 二分探索サンプル コードの再帰的および非再帰的実装


以上がPHP 順序付きリスト二分探索 (半探索) アルゴリズムの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。