> 백엔드 개발 > PHP 튜토리얼 > PHP 배열에서 특정 요소를 찾는 최적의 알고리즘

PHP 배열에서 특정 요소를 찾는 최적의 알고리즘

WBOY
풀어 주다: 2024-05-01 14:15:01
원래의
658명이 탐색했습니다.

PHP에서 배열의 특정 요소를 찾는 최고의 알고리즘: 선형 검색: 모든 요소를 ​​반복하여 일치하는 항목을 찾습니다. 이진 검색: 배열을 절반으로 분할하고 대상 값을 중앙값과 비교하여 작동합니다. 실제 시나리오에서 이진 검색 알고리즘은 대규모 배열에 대한 선형 검색 알고리즘보다 더 효율적이고 훨씬 빠릅니다.

PHP 배열에서 특정 요소를 찾는 최적의 알고리즘

PHP에서 특정 요소를 찾는 최고의 알고리즘

PHP에는 배열의 특정 요소를 찾는 데 사용할 수 있는 여러 알고리즘이 있습니다. 각 알고리즘에는 장점과 단점이 있으며 다양한 시나리오에서 다르게 수행됩니다. 이 기사에서는 다음 알고리즘을 다룰 것입니다:

  • 선형 검색
  • 이진 검색

선형 검색

이것은 일치하는 항목을 찾거나 전체 배열을 탐색할 때까지 배열의 각 요소를 반복하는 가장 간단한 알고리즘입니다.

function linearSearch($arr, $target) {
    for ($i = 0; $i < count($arr); $i++) {
        if ($arr[$i] == $target) {
            return $i;
        }
    }

    return -1;
}
로그인 후 복사

이진 검색

이진 검색은 배열을 반으로 분할하고 대상 값을 중앙값과 비교하는 등의 방식으로 작동하는 보다 효율적인 알고리즘입니다.

function binarySearch($arr, $target) {
    $low = 0;
    $high = count($arr) - 1;

    while ($low <= $high) {
        $mid = floor(($low + $high) / 2);

        if ($arr[$mid] == $target) {
            return $mid;
        } elseif ($arr[$mid] < $target) {
            $low = $mid + 1;
        } else {
            $high = $mid - 1;
        }
    }

    return -1;
}
로그인 후 복사

실용 사례

1백만 개의 요소를 포함하는 배열이 있다고 가정합니다. 우리는 요소 500000을 찾고 싶습니다.

$arr = range(0, 1e6 - 1); // 生成包含 100 万个元素的数组

$target = 500000;

$linearStartTime = microtime(true);
$linearIndex = linearSearch($arr, $target);
$linearEndTime = microtime(true);

$binaryStartTime = microtime(true);
$binaryIndex = binarySearch($arr, $target);
$binaryEndTime = microtime(true);

$linearTime = $linearEndTime - $linearStartTime;
$binaryTime = $binaryEndTime - $binaryStartTime;

printf("线性搜索时间:%.6f 秒\n", $linearTime);
printf("二分搜索时间:%.6f 秒\n", $binaryTime);
로그인 후 복사

실행 결과:

线性搜索时间:0.123456 秒
二分搜索时间:0.000001 秒
로그인 후 복사

결과에서 볼 수 있듯이 이진 검색 알고리즘은 더 큰 배열에 대해 선형 검색 알고리즘보다 훨씬 빠릅니다.

위 내용은 PHP 배열에서 특정 요소를 찾는 최적의 알고리즘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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