(Binary Search) PHP의 이진 검색 알고리즘: 설명, 단계 및 예

이진 검색 알고리즘은 정렬된 배열에서 특정 값을 찾는 효율적인 방법입니다. 이 접근 방식은 배열을 더 작은 부분으로 나누고 검색 범위의 중간 위치에 있는 값과 대상 값을 지속적으로 비교합니다. 값이 일치하면 원하는 값을 찾습니다. 그렇지 않으면 알고리즘은 계속해서 검색 범위를 좁히고 값을 찾거나 검사할 요소가 더 이상 남지 않을 때까지 프로세스를 반복합니다.

단계:

  1. 검색 범위 초기화:  배열의 첫 번째 위치에서 left  마지막 위치까지 검색 범위를 선택하여 시작합니다. right
  2. 중간점 찾기: 및 올바른 위치를 평균하여 중간점을 계산합니다 left. 이것은 검색 범위의 중간 지점입니다.
  3. 값 비교: 중간 지점의 값과 목표 값을 비교합니다.
  4. 비교 결과 처리: 중간 지점의 값이 목표 값과 일치하면 이 위치를 반환합니다. 중간 지점의 값이 목표 값보다 작으면 왼쪽 위치를 중간 + 1로 업데이트하여 오른쪽 절반을 검색합니다. 중간 지점의 값이 목표 값보다 크면 오른쪽 위치를 중간- 1로 업데이트하여 왼쪽 절반을 검색합니다.
  5. 반복: 값을 찾거나 더 이상 확인할 요소가 없을 때까지 2~4단계를 반복합니다 left > right.

장점과 단점

이점:

  • 효율적인 성능: 알고리즘의 시간 복잡도는 O(log n)이므로 대용량 데이터 세트를 처리하는 데 매우 효율적입니다.
  • 대규모 데이터 세트에 효과적: 이진 검색은 대규모 데이터 세트에 대해 빠르게 검사할 요소 수를 줄이는 데 효과적입니다.

단점:

  • 정렬된 배열에만 적용 가능: 알고리즘은 정렬된 배열에서만 작동합니다.
  • 가변 단계 수: 값을 찾는 데 필요한 단계 수는 배열에서의 위치에 따라 다르며 끝 근처의 값에 대해 많은 단계를 거칠 수 있습니다.

예: PHP의 정렬된 배열에서 값 12를 찾기 위한 이진 검색

function binarySearch($arr, $target) {  
    $left = 0;  
    $right = count($arr)- 1;  
  
    while($left <= $right) {  
        $mid = floor(($left + $right) / 2);  
  
        if($arr[$mid] == $target) {  
            return $mid; // Return the position of the value  
        } elseif($arr[$mid] < $target) {  
            $left = $mid + 1;  
        } else {  
            $right = $mid- 1;  
        }  
    }  
  
    return -1; // Value not found  
}  
  
$array = [2, 5, 8, 12, 15, 20, 30];  
$targetValue = 12;  
  
$result = binarySearch($array, $targetValue);  
  
if($result != -1) {  
    echo "Value $targetValue found at position $result.";  
} else {  
    echo "Value $targetValue not found in the array.";  
}  

예의 설명

  1.  배열의 첫 번째 위치에서 left = 0 마지막 위치까지의 초기 검색 범위로 시작합니다. right = 6
  2. 왼쪽과 오른쪽 위치를 평균하여 중간 지점(mid)을 계산합니다. mid = 3. mid의 값은 12입니다.
  3. mid(12)의 값을 대상 값(12)과 비교하고 일치하는 항목을 찾으므로 위치 3을 반환합니다.
  4. 알고리즘이 종료되고 "위치 3에서 찾은 값 12"라는 결과를 출력합니다.