> 백엔드 개발 > PHP 튜토리얼 > PHP를 사용하여 이진 검색 알고리즘 코드 공유 구현

PHP를 사용하여 이진 검색 알고리즘 코드 공유 구현

高洛峰
풀어 주다: 2023-03-03 21:26:02
원래의
1310명이 탐색했습니다.

첫 번째 방법:
[이진 검색 요구 사항]: 1. 순차적 저장 구조를 사용해야 합니다. 2. 키워드의 크기에 따라 순서대로 배열해야 합니다.
【장점 및 단점】반감 검색 방법의 장점은 비교 횟수가 적고 검색 속도가 빠르며 평균 성능이 좋다는 점입니다. 어렵다. 따라서 이진 검색 방법은 자주 변경되지 않지만 자주 검색되는 정렬된 목록에 적합합니다.
[알고리즘 아이디어] 먼저 테이블의 중간 위치에 기록된 키워드를 검색 키워드와 비교하여 둘이 같으면 검색에 성공하고, 그렇지 않으면 중간 위치 기록을 사용하여 테이블을 두 개의 하위로 나눕니다. -테이블, 첫 번째 및 마지막. 중간 위치 레코드인 경우 기록된 키워드가 검색 키워드보다 크면 이전 하위 테이블을 추가로 검색하고, 그렇지 않으면 다음 하위 테이블을 추가로 검색합니다.

<?php 
//正向排序的数组 
$arr=array(1,3,5,7,9,11); 
//逆向排序的数组 
$arr2=array(11,9,7,5,3,1); 
//对正向排序的数组进行二分查找 
function searchpart($arr,$x){ 
$start=0; 
$end=count($arr)-1; 
while($start<=$end){ 
$mid=intval(($start+$end)/2);//这里只需要保证中间项下标的计算值为整数即可,也可以四舍五入,不影响结果 
if($arr[$mid]>$x){//如果中间项的值大于待查值,说明代差值位于中间项的左边,因此,起始下标不变,结束下标变成中间项下标减1,第一次搜索的是$arr[0]-$arr[5]的话,下一次搜索 
$end=$mid-1;//$arr[0]-$arr[1] 
}elseif($arr[$mid]<$x){//如果中间项的值小于待查值,说明代差值位于中间项的右边,因此,结束下标不变,起始下标变成中间项下标加1,第一次搜索的是$arr[0]-$arr[5]的话,下一//次搜索是,$arr[3]-$arr[5] 
$start=$mid+1; 
}else{//找到了,返回待查值下标 
return $mid; 
} 
} 
} 
//对逆向排序的数组进行二分查找 
function searchpart2($arr,$x){ 
$start=0; 
$end=count($arr)-1; 
while($start<=$end){ 
$mid=intval(($start+$end)/2);//这里只需要保证中间项下标的计算值为整数即可,也可以四舍五入,不影响结果 
if($arr[$mid]>$x){//如果中间项的值大于待查值,说明代差值位于中间项的右边,因此,结束下标不变,起始下标变成中间项下标加1,第一次搜索的是$arr[0]-$arr[5]的话,下一次搜索 
$start=$mid+1;//$arr[3]-$arr[5] 
}elseif($arr[$mid]<$x){//如果中间项的值小于待查值,说明代差值位于中间项的左边,因此,起始下标不变,结束下标变成中间项下标减1,第一次搜索的是$arr[0]-$arr[5]的话,下一//次搜索是,$arr[0]-$arr[1] 
$end=$mid-1; 
}else{//找到了,返回待查值下标 
return $mid; 
} 
} 
} 
echo searchpart2($arr,5).&#39;<br>&#39;; 
echo searchpart2($arr2,5); 
?>
로그인 후 복사

PHP에서 이진 검색 알고리즘 구현
최근에는 이전에 배운 알고리즘 지식을 정리했습니다. 비록 WEB 개발에서는 거의 사용되지 않지만 여전히 유용한 알고리즘을 백업합니다.
반 탐색 방법은 이진 탐색 방법이라고도 하며 요소 간의 순서 관계를 최대한 활용하고 분할 정복 전략을 채택하여 O(log n)에서 탐색 작업을 완료할 수 있습니다. 최악의 경우.
[기본 아이디어]
n 요소를 대략 같은 수의 두 부분으로 나누고, a[n/2]를 찾으려는 x와 비교하고, x=a[n/2]이면 x를 찾습니다. 알고리즘이 종료됩니다. xa[n/2]이면 배열 a의 오른쪽 절반에서 x를 계속 검색하면 됩니다.
이진 검색 방법은 매우 널리 사용되며 그 아이디어는 이해하기 쉽습니다. 최초의 이진 검색 알고리즘은 1946년에 등장했지만 완전히 정확한 최초의 이진 검색 알고리즘은 1962년에야 나타났습니다. Bentley는 자신의 저서 "Writing Correct Programs"에서 컴퓨터 전문가의 90%가 2시간 이내에 완전히 올바른 이진 검색 알고리즘을 작성할 수 없다고 썼습니다. 문제의 핵심은 각 검색 범위의 경계를 정확하게 공식화하고 종료 조건을 결정하며 홀수와 짝수의 다양한 상황을 정확하게 요약하는 것입니다. 실제로 정리해보면 그 구체적인 알고리즘이 매우 훌륭하다는 것을 알 수 있습니다. 직관적이다.
PHP에서 이진 검색 알고리즘 구현

/** 
* 二分查找算法 
* 
* @param array $arr 有序数组 
* @param int $val 查找的数值 
* @return int 查找值存在返回数组下标,不存在返回-1 
*/ 
function binary_search($arr,$val) 
{ 
$l = count($arr);//获得有序数组长度 
$low = 0; 
$high = $l -1; 
while($low <= $high) 
{ 
$middle = floor(($low + $high) / 2); 
if($arr[$middle] == $val) 
{ 
return $middle; 
} 
elseif($arr[$middle] > $val) 
{ 
$high = $middle - 1; 
} 
else 
{ 
$low = $middle + 1; 
} 
} 
return -1; 
} 
//示例 
$arr = array(1,2,3,4,5,6,7,8,9,12,23,33,35,56,67,89,99); 
echo binary_search($arr,57);
로그인 후 복사

PHP를 사용하여 이진 검색 알고리즘을 구현하는 더 많은 코드 공유를 보려면 PHP 중국어 웹사이트를 주목하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿