현재 위치: > 최신 기사 목록> 슬라이딩 윈도우 알고리즘을 구현할 때 Array_Slice 사용에 대한 자세한 설명

슬라이딩 윈도우 알고리즘을 구현할 때 Array_Slice 사용에 대한 자세한 설명

gitbox 2025-05-29

슬라이딩 윈도우 알고리즘은 일반적이고 효율적인 알고리즘 아이디어로 문자열 처리, 배열 검색, 최대/최소 서브 어레이 등과 같은 문제에 널리 사용 됩니다. 이 기사는 Array_Slice 가 슬라이딩 윈도우 알고리즘에 일반적으로 사용되는 이유를 자세히 설명하고 예제와 함께 특정 사용법을 설명합니다.

슬라이딩 윈도우 알고리즘은 무엇입니까?

슬라이딩 윈도우 알고리즘은 "창"을 유지하여 배열 또는 문자열을 가로 지릅니다. 윈도우의 경계는 앞으로 계속 미끄러 져 창의 데이터를 동적으로 조정하여 반복적 인 계산을 피하고 효율성을 향상시킵니다. 예를 들어, 조건 등을 충족하는 배열에서 가장 긴 서브 어레이 또는 고정 길이 서브 어레이의 최대 합을 찾는 것은 슬라이딩 창으로 수행 할 수 있습니다.

PHP에서 Array_Slice 의 역할

Array_Slice는 배열에서 연속 요소를 추출하는 데 PHP에서 사용되는 함수입니다. 구문은 다음과 같습니다.

 array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array
  • $ 배열 : 배열을 입력하십시오

  • $ 오프셋 : 시작 위치 (끝에서 시작할 음수를 지원)

  • $ 길이 : 길이를 가로 채기 (선택 사항)

  • $ preserve_keys : 원래 배열의 키 이름을 유지할지 여부는 기본적으로 보존되지 않습니다.

새 배열을 반환합니다.이 배열은 $ 오프셋 에서 시작하는 원래 배열의 $ 길이 요소 조각 인 새 배열을 반환합니다.

array_slice가 일반적으로 슬라이딩 창에 사용되는 이유는 무엇입니까?

  1. 간결하고 명확 : 슬라이딩 창의 키는 매번 창 경계를 조정하는 것입니다. Array_Slice는 현재 창에서 요소를 빠르게 얻을 수 있으며 코드 로직은 간단하고 직관적입니다.

  2. 원래 배열을 수정하지 마십시오 : Array_Slice는 원래 배열을 변경하지 않으며 복잡한 배열 작업의 부작용을 피합니다.

  3. 부정적인 숫자 오프셋 지원 : 창 시작점을 유연하게 처리하며 요소를 뒤에서 앞뒤로 가져 오는 것이 편리합니다.

  4. 디버그가 쉽게 나오기 : 창을 미끄러 뜨린 후 Array_Slice를 호출하여 최신 창 배열을 가져와 인쇄 및보기가 쉽습니다.

그러나 Array_Slice를 사용하면 각 통화가 새로운 어레이를 생성하고 자주 호출하면 추가 메모리와 시간 간접비가 발생할 수 있으므로 성능 문제에주의를 기울여야합니다. 성능에 민감한 시나리오의 경우 창 또는 포인터 색인에서 요소 수를 유지하여 최적화 할 수 있습니다.

코드 예 : Array_Slice를 사용하여 고정 길이 서브 어레이 어레이를 구현하여 슬라이딩 창의 최대 합을 찾으십시오.

 <?php

function maxSumSubarray(array $nums, int $k): int {
    $maxSum = PHP_INT_MIN;
    $n = count($nums);

    for ($i = 0; $i <= $n - $k; $i++) {
        // 사용 array_slice 현재 창 요소를 사용하십시오
        $window = array_slice($nums, $i, $k);
        $currentSum = array_sum($window);

        if ($currentSum > $maxSum) {
            $maxSum = $currentSum;
        }
    }

    return $maxSum;
}

// 테스트 데이터
$nums = [2, 1, 5, 1, 3, 2];
$k = 3;
echo "고정 길이 $k 서브 배열의 최대 합은 다음과 같습니다:" . maxSumSubarray($nums, $k);

?>

분석

  • Array_Slice ($ n, $ i, $ k)는 현재 슬라이딩 창의 요소를 나타내는 위치 $ i 에서 시작하는 길이 $ k 의 서브 배열을 꺼냅니다.

  • Array_sum을 사용하여 창의 요소를 계산하고 최대 합을 업데이트하십시오.

  • 코드는 간단하고 이해하기 쉽고 슬라이딩 창의 모든 단계를 명확하게 보여줍니다.

고급 사고 : Array_Slice에 대한 빈번한 호출을 피하는 방법?

성능을 최적화 해야하는 경우 array_slice를 직접 호출하는 대신 두 포인터와 창에서 누적 된 값을 유지할 수 있습니다.

 function maxSumSubarrayOptimized(array $nums, int $k): int {
    $maxSum = PHP_INT_MIN;
    $windowSum = 0;
    $n = count($nums);

    for ($i = 0; $i < $n; $i++) {
        $windowSum += $nums[$i];
        if ($i >= $k - 1) {
            $maxSum = max($maxSum, $windowSum);
            $windowSum -= $nums[$i - $k + 1];
        }
    }

    return $maxSum;
}

이 방법은 배열 슬라이싱 및 복사를 피하고 시간 복잡성이 낮아서 빅 데이터 시나리오에 적합합니다.

요약

PHP에서 슬라이딩 윈도우 알고리즘을 구현할 때 Array_Slice는 매우 직관적이고 편리한 도구입니다. 이를 통해 창 데이터를 신속하게 차단하고 코드 로직을 단순화하며 이해 및 디버깅을 용이하게 할 수 있습니다. 그러나 성능 오버 헤드에도주의를 기울여야합니다. 효율이 높은 상황에서 포인터를 사용하여 창 경계를 유지하고 배열을 자주 복사하지 않는 것이 좋습니다.

슬라이딩 윈도우 알고리즘을 처음 사용하는 경우 Array_Slice를 사용하여 창의 움직임과 기능을 먼저 이해 한 다음 점차 최적화 기술을 학습하는 것이 좋습니다. 이 단계별로 아이디어를 마스터 할뿐만 아니라 효율적인 코드를 작성할 수 있습니다.