>  기사  >  백엔드 개발  >  PHP 반(2점) 검색 알고리즘 예제 분석 PHP 기술

PHP 반(2점) 검색 알고리즘 예제 분석 PHP 기술

jacklove
jacklove원래의
2018-06-23 17:05:381287검색

이 글에서는 주로 PHP 반(이등분) 검색 알고리즘을 소개하며, PHP 반(이등분) 검색 알고리즘의 개념, 원리, 구현 및 사용법을 예제 형식으로 자세히 분석합니다. ) 검색. 알고리즘 카테고리는 참고용입니다. 필요하신 분들은 참고하시면 됩니다.

이 글에서는 PHP 반(이등분) 검색 알고리즘을 예로 설명합니다. 참고용으로 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

반쪽 쿼리는 양수 또는 역순으로 정렬된 배열, 문자열 등에 대해서만 적용됩니다.

알고리즘:

먼저 중간을 선택하세요. 배열의 위치, 중간 위치가 없으면 반올림합니다.

가운데를 반으로 접어서 크기를 판단하고 전반부 또는 후반부를 입력합니다.

그런 다음 첫 번째 부분에서 동일한 절반 쿼리를 수행합니다. 반 또는 후반,

일치하는 문자를 찾을 때까지 멈추지 마십시오. (이 예에서는 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
*/
?>

추가: 절반(이등분) 검색 알고리즘 클래스:

/**
 * 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 Cloud COS에 필요한 요청 서명의 관련 콘텐츠를 생성합니다. 인터페이스

PHP 데이터베이스 구성 일반 방법에 액세스(json) Qiao

PHP가 MySQL 데이터베이스에 연결하여 json 형식으로 출력하는 관련 설명

위 내용은 PHP 반(2점) 검색 알고리즘 예제 분석 PHP 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.