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

jacklove
リリース: 2023-04-01 18:56:01
オリジナル
1356 人が閲覧しました

この記事では、主に 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 は Tencent が要求するリクエスト署名の関連コンテンツを生成しますクラウドCOSインターフェース

PHPアクセスデータベース設定一般方法(json)Qiao


PHPとMySQLデータベースの接続説明json形式で出力します


#

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート