>백엔드 개발 >PHP 튜토리얼 >PHP에서 구현된 이진 검색 알고리즘의 예제 분석 및 설명

PHP에서 구현된 이진 검색 알고리즘의 예제 분석 및 설명

jacklove
jacklove원래의
2018-07-05 17:50:241659검색

이 글은 주로 PHP에서 구현된 이진 검색 알고리즘을 소개하며, 이진 검색 알고리즘의 원리와 루프, 재귀 등의 구현 기술을 예제 형식으로 분석합니다. 도움이 필요한 친구들은 참고할 수 있습니다. PHP에서 구현된 이진 검색 알고리즘을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

이진 검색 방법에서는 배열이 순서 있는 배열이어야 합니다.

우리 배열이 증가하는 배열이라고 가정하면 먼저 배열의 중간 위치를 찾아야 합니다. .

하나. 중간 위치를 알려면 시작 위치와 끝 위치를 알아야 하며 그런 다음 중간 위치의 값을 가져와 우리 값과 비교해야 합니다.

둘. 중간 값이 주어진 값보다 크다면, 이는 우리의 값이 중간 위치 이전이라는 뜻입니다. 이때, 중간 이전이기 때문에 변경해야 할 값은 입니다. 이때 끝 위치의 값은 이 시점에서 중간에 있습니다.

셋. 반면, 중간값이 우리가 제공하는 값보다 작다면, 주어진 값이 중간 위치 이후에 있다는 뜻이다. 이때, 뒷부분의 값은 2개로 다시 나눠져야 한다. 중간 값 뒤에 있으므로 변경해야 할 값은 시작 위치 값입니다. 이때 시작 위치의 값은 지정된 값을 찾을 때까지 현재 중간 위치여야 합니다.
넷. 혹은 중간값이 초기 시작 위치와 같거나, 끝 위치(이 경우 주어진 값을 찾을 수 없음)인 경우 아래 코드를 이용하여 구현해보겠습니다~

//循环实现
function getValue($num,$arr)
{
//查找数组的中间位置
$length=count($arr);
$start=0;
$end=$length;
$middle=floor(($start+$end)/2);
//循环判断
while($start>$end-1)
{
if($arr[middle]==$num)
{
return middle+1;
}elseif($arr[middle]<$num)
{
//如果当前要查找的值比当前数组的中间值还要打,那么意味着该值在数组的后半段
//所以起始位置变成当前的middle的值,end位置不变。
$start=$middle;
$middle=floor(($start+$end)/2);
}else{
//反之
$end=$middle;
$middle=floor(($start+$end)/2);
}}
return false;
}


//循环实现
function getValue($num,$arr)
{
//查找数组的中间位置
$length=count($arr);
$start=0;
$end=$length;
$middle=floor(($start+$end)/2);
//循环判断
while($start>$end-1)
{
if($arr[middle]==$num)
{
return middle+1;
}elseif($arr[middle]<$num)
{
//如果当前要查找的值比当前数组的中间值还要打,那么意味着该值在数组的后半段
//所以起始位置变成当前的middle的值,end位置不变。
$start=$middle;
$middle=floor(($start+$end)/2);
}else{
//反之
$end=$middle;
$middle=floor(($start+$end)/2);
}}
return false;
}

관심 있는 기사:

PHP에 구현된 절반 검색 알고리즘에 대한 설명 예


PHP에 구현된 문자열 일치 알고리즘 예


PHP에 구현된 최대 순방향 일치 알고리즘에 대한 설명 예 PHP


위 내용은 PHP에서 구현된 이진 검색 알고리즘의 예제 분석 및 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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