현재 위치: > 최신 기사 목록> PHP 이진 검색 알고리즘 및 예제 자습서에 대한 자세한 설명

PHP 이진 검색 알고리즘 및 예제 자습서에 대한 자세한 설명

M66 2025-06-23

1. PHP의 반대 "바이너리"검색 알고리즘 소개

이진 검색으로도 알려진 PHP의 하프 찾기 검색 알고리즘은 순서대로 요소 위치를 효율적으로 찾는 데 사용되는 고전적인 알고리즘입니다. 검색 범위를 반으로 끊임없이 분할하고 대상이 존재하지 않도록 결정되거나 결정될 때까지 목표 요소와 중간 요소 사이의 크기 관계를 판단하여 검색 범위를 빠르게 좁 힙니다.

1.1 알고리즘 원리

하프 조회를 접는 핵심 단계에는 다음이 포함됩니다.

배열의 시작 색인을 왼쪽으로 , 끝 인덱스를 오른쪽 으로 설정하십시오.

중간 지수 중간을 계산하십시오. 즉 , (왼쪽 + 오른쪽) / 2 .

대상 값을 중간 요소와 비교하십시오. 동일하면 인덱스 를 반환하면 검색이 성공적입니다.

대상 값이 중간 요소보다 작은 경우 오른쪽 에서 1-1 로 설정하고 왼쪽 절반에서 계속 검색하십시오.

대상 값이 중간 요소보다 큰 경우 왼쪽 으로 + 1로 설정하고 오른쪽 절반에서 계속 검색하십시오.

목표 값 또는 왼쪽> 오른쪽이 발견 될 때까지 위의 단계를 반복하여 검색이 실패했음을 나타냅니다.

1.2 알고리즘 예제

다음은 반 찾기 검색 알고리즘의 구현을 보여주는 PHP 코드 예제입니다.

 
function binarySearch($arr, $target) {
    $left = 0;
    $right = count($arr) - 1;
    while ($left <= $right) {
        $mid = intval(($left + $right) / 2);
        if ($arr[$mid] == $target) {
            return $mid; // 목표 값의 위치
        }
        if ($arr[$mid] < $target) {
            $left = $mid + 1; // 오른쪽 절반에서 계속 검색하십시오
        } else {
            $right = $mid - 1; // 왼쪽 절반에서 계속 검색하십시오
        }
    }
    return -1; // 목표 값은 찾을 수 없었습니다
}
<p>$arr = [1, 3, 5, 7, 9, 11, 15];<br>
$target = 7;<br>
$index = binarySearch($arr, $target);<br>
if ($index != -1) {<br>
echo "대상 가치 $target 배열의 위치는입니다 $index";<br>
} else {<br>
echo "대상 가치 $target 배열에는 존재하지 않습니다";<br>
}<br>

위의 코드는 정렬 된 배열 및 대상 값을 매개 변수로 허용하는 이진 검색 함수를 정의하고 배열에서 대상 값의 인덱스 위치를 리턴하고 존재하지 않으면 -1을 반환합니다.

1.3 알고리즘 분석

반 찾기 검색 알고리즘의 시간 복잡성은 O (log n) 이며, 여기서 n은 배열 길이입니다. 각 조회는 범위를 절반으로 줄이며 이는 선형 조회보다 훨씬 효율적입니다.

따라서 바이너리 검색은 대형 순서 어레이의 빠른 포지셔닝 요소에 매우 적합합니다.

2. 중요성 분석

2.1 큰 순서 배열의 빠른 위치

이진 검색은 검색 범위를 크게 좁히고 비교 횟수를 줄이며 빠른 포지셔닝을 달성 할 수 있습니다. 특히 데이터 볼륨이 큰 시나리오에 적합합니다.

2.2 프로그램 실행 효율성 향상

이진 검색을 사용하는 빈번한 검색 작업이있는 응용 프로그램에서는 이진 검색을 사용하면 시간 간접비를 크게 줄이고 전반적인 실행 효율성을 향상 시키며 불필요한 횡선을 피할 수 있습니다.

3. 요약

이 기사는 PHP 중간 하프 피니시 (Binary Search) 알고리즘의 원리와 구현을 체계적으로 설명하고 코드 예제를 통해 특정 사용법을 보여줍니다. 이 알고리즘은 낮은 시간 복잡성과 고효율의 특성을 가지며 순서 배열의 효율적인 검색에 적합합니다. 이 알고리즘을 마스터하면 개발자가 문제 찾기 및 프로그램 성능을 다루는 능력을 향상시키는 데 도움이됩니다.