백엔드 개발 PHP 튜토리얼 php二分查找二种实现示例_PHP

php二分查找二种实现示例_PHP

Jun 01, 2016 am 11:55 AM
이진 검색

php二分查找示例

二分查找常用写法有递归和非递归,在寻找中值的时候,可以用插值法代替求中值法。
当有序数组中的数据均匀递增时,采用插值方法可以将算法复杂度从中值法的lgN减小到lglgN

复制代码 代码如下:
/**
 * 二分查找递归解法
 * @param type $subject
 * @param type $start
 * @param type $end
 * @param type $key
 * @return boolean
 */
function binarySearch_r($subject, $start, $end, $key)
{

 if ( $start >= $end ) return FALSE;
 $mid = getMidKey($subject, $start, $end, $key);
 if ( $subject[$mid] == $key ) return $mid;
 if ( $key > $subject[$mid] ) {
  return binarySearch($subject, $mid, $end, $key);
 }
 if ( $key   return binarySearch($subject, $start, $mid, $key);
 }
}

/**
 * 二分查找的非递归算法
 * @param type $subject
 * @param type $n
 * @param type $key
 */
function binarySearch_nr($subject, $n, $key)
{
 $low = 0;
 $high = $n;
 while ( $low   $mid = getMidKey($subject, $low, $high, $key);
  if ( $subject[$mid] == $key ) return $mid;
  if ( $subject[$mid]    $low = $mid + 1;
  }
  if ( $subject[$mid] > $key ) {
   $high = $mid - 1;
  }
 }
}
function getMidKey($subject, $low, $high, $key)
{
 /**
  * 取中值算法1 取中值 不用 ($low+$high)/2的方式是因为 防止low和high较大时候,产生溢出....
  */
 //return round($low + ($high - $low) / 2);

 /**
  * 经过改进的插值算法求中值,当数值分布均匀情况下,再降低算法复杂度到lglgN
  * 取中值算法2
  */
 return round( (($key - $subject[$low]) / ($subject[$high] - $subject[$low])*($high-$low) ) );
}

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

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C#을 사용하여 이진 검색 알고리즘을 작성하는 방법 C#을 사용하여 이진 검색 알고리즘을 작성하는 방법 Sep 19, 2023 pm 12:42 PM

C#을 사용하여 이진 검색 알고리즘을 작성하는 방법

멀티 스레드 처리를 위해 pthread를 사용하여 C 언어로 작성된 이진 검색 프로그램 멀티 스레드 처리를 위해 pthread를 사용하여 C 언어로 작성된 이진 검색 프로그램 Aug 26, 2023 pm 12:45 PM

멀티 스레드 처리를 위해 pthread를 사용하여 C 언어로 작성된 이진 검색 프로그램

Java를 사용하여 이진 검색 알고리즘을 구현하는 방법 Java를 사용하여 이진 검색 알고리즘을 구현하는 방법 Sep 19, 2023 pm 12:57 PM

Java를 사용하여 이진 검색 알고리즘을 구현하는 방법

Python을 사용하여 이진 검색 알고리즘을 구현하는 방법은 무엇입니까? Python을 사용하여 이진 검색 알고리즘을 구현하는 방법은 무엇입니까? Sep 20, 2023 pm 01:24 PM

Python을 사용하여 이진 검색 알고리즘을 구현하는 방법은 무엇입니까?

C 언어에서 이진 검색 알고리즘을 사용하여 배열에서 가장 작은 요소를 찾는 방법은 무엇입니까? C 언어에서 이진 검색 알고리즘을 사용하여 배열에서 가장 작은 요소를 찾는 방법은 무엇입니까? Aug 25, 2023 pm 08:37 PM

C 언어에서 이진 검색 알고리즘을 사용하여 배열에서 가장 작은 요소를 찾는 방법은 무엇입니까?

이진 검색 알고리즘을 사용하여 숫자의 세제곱근을 찾는 Java 프로그램 이진 검색 알고리즘을 사용하여 숫자의 세제곱근을 찾는 Java 프로그램 Aug 28, 2023 pm 01:33 PM

이진 검색 알고리즘을 사용하여 숫자의 세제곱근을 찾는 Java 프로그램

C 프로그램에서는 부동 소수점 연산을 사용하지 않고 유리수를 검색하기 위해 이진 검색 알고리즘을 사용합니다. C 프로그램에서는 부동 소수점 연산을 사용하지 않고 유리수를 검색하기 위해 이진 검색 알고리즘을 사용합니다. Aug 27, 2023 pm 06:05 PM

C 프로그램에서는 부동 소수점 연산을 사용하지 않고 유리수를 검색하기 위해 이진 검색 알고리즘을 사용합니다.

PHP 알고리즘 분석: 이진 검색 알고리즘을 사용하여 정렬된 배열에서 요소를 빠르게 찾는 방법은 무엇입니까? PHP 알고리즘 분석: 이진 검색 알고리즘을 사용하여 정렬된 배열에서 요소를 빠르게 찾는 방법은 무엇입니까? Sep 19, 2023 pm 01:14 PM

PHP 알고리즘 분석: 이진 검색 알고리즘을 사용하여 정렬된 배열에서 요소를 빠르게 찾는 방법은 무엇입니까?

See all articles