ホームページ  >  記事  >  バックエンド開発  >  PHP 半検索アルゴリズム例分析 php スキル

PHP 半検索アルゴリズム例分析 php スキル

jacklove
jackloveオリジナル
2018-06-25 16:48:591571ブラウズ

この記事では、主に PHP ハーフ (2 点) 検索アルゴリズムを紹介し、PHP ハーフ (2 点) 検索アルゴリズムの概念、原理、実装および使用法を例の形式で詳細に分析します。 PHP ハーフ (2 点) 検索アルゴリズムも付属しています。必要な場合は、この記事の例で PHP ハーフ (二分) 検索アルゴリズムを説明します。 。参考までに皆さんと共有してください。詳細は次のとおりです。

Half クエリは、正または逆の順序で並べ替えられた配列、文字列などにのみ適用できます。 #アルゴリズム:

まず配列の中央の位置を取得し、中央の位置がない場合は切り捨てます。

中央から半分に折り、サイズを判断します。前半または後半を入力します。

次に、前半または後半に対して同じハーフアンドハーフクエリを実行します。

は、一致する文字が見つかるまで停止しません。 (この例ではbreakを使用していますが、関数内にある場合はreturnだけです)

phpで実装したコードは次のとおりです:

<?php
$arr = array(1,2,3,4,5,6,7,8,9,10);//数组
$key = 4;//要查询的关键字
$low = 0;//开始位的标志
$high = count($arr);//终止位的标志
while($low <= $high){//查询开始结束的条件
 $mid = floor(($low + $high)/2);//进行中间位置计算,向下取整
 if($arr[$mid] == $key){//查询成功
 echo $arr[$mid];
 break;//结束本页执行,函数可用return
 }elseif($arr[$mid] > $key){ //查询前半段,把结束标志移到中间位置前一位
 $high = $mid - 1;
 }else{ //查询后半段,把开始位置移到中间位置的后一位
 $low = $mid + 1;
 }
}
/*
运行结果:4
*/
?>

##追加: 2 等分 (二等分) 検索アルゴリズム クラス:

/**
 * Description:php实现二分查找算法的类
 * @author wzy
 */
class binary_search{
  public $arr;
  public $key;
  function __construct($arr,$key){
    //这里初始化的数组已经是有序数组
    $this->arr=$arr;
    $this->key=$key;
  }
  function binarysearch(){
    $start=0;
    $end=count($this->arr)-1;
    while($start<=$end){
      //mid的取值可以为上整数或者下整数
      $mid=ceil(($start+$end)/2);
      //$mid=($start+$end)>>1;
      //$mid=intval(($start+$end)/2);
      if($this->arr[$mid]<$this->key){
        $start=$mid+1;
      }else if($this->arr[$mid]>$this->key){
        $end=$mid-1;
      }else{
        return $mid;
      }
    }
  }
}
また、配列内の要素に重複データがあり、要素の位置 (

$arr=array(1,2,3,4,5,6,6,6,6,7,8);

など) を返す必要がある場合もあります。

要素 6 を検索する場合、返される位置は他の位置ではなく 5 である必要があるため (添字は 0 からカウントされます)、返されたmid で判断する必要があります。コードは次のとおりです。

#

/**
 * Description:php实现二分查找算法的类
 * @author wzy
 */
class binary_search{
  public $arr;
  public $key;
  function __construct($arr,$key){
    //这里初始化的数组已经是有序数组
    $this->arr=$arr;
    $this->key=$key;
  }
  function binarysearch(){
    $start=0;
    $end=count($this->arr)-1;
    while($start<=$end){
      //mid的取值可以为上整数或者下整数
      $mid=ceil(($start+$end)/2);
      //$mid=($start+$end)>>1;
      //$mid=intval(($start+$end)/2);
      if($this->arr[$mid]<$this->key){
        $start=$mid+1;
      }else if($this->arr[$mid]>$this->key){
        $end=$mid-1;
      }else{
        //返回第一个匹配的元素
        for($i=$mid-1;$i>=0;$i--){
          if($this->arr[$i]==$this->key){
            $mid=$i;
          }else{
            break;
          }
        }
        return $mid;
      }
    }
  }
}

興味があるかもしれない記事:

PHP ハーフ (2 点) ) 検索アルゴリズム例分析 PHP スキル

#ファイルアップロードのlayuiフレームワーク実装と、アップロードされたファイルのTP3.2.3バックグラウンド処理操作の例

#Laravelフレームワークは、次の例を実装します。モデルレイヤーの追加、削除、変更、確認

以上がPHP 半検索アルゴリズム例分析 php スキルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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