슬라이딩 윈도우 알고리즘은 일반적이고 효율적인 알고리즘 아이디어로 문자열 처리, 배열 검색, 최대/최소 서브 어레이 등과 같은 문제에 널리 사용 됩니다. 이 기사는 Array_Slice 가 슬라이딩 윈도우 알고리즘에 일반적으로 사용되는 이유를 자세히 설명하고 예제와 함께 특정 사용법을 설명합니다.
슬라이딩 윈도우 알고리즘은 "창"을 유지하여 배열 또는 문자열을 가로 지릅니다. 윈도우의 경계는 앞으로 계속 미끄러 져 창의 데이터를 동적으로 조정하여 반복적 인 계산을 피하고 효율성을 향상시킵니다. 예를 들어, 조건 등을 충족하는 배열에서 가장 긴 서브 어레이 또는 고정 길이 서브 어레이의 최대 합을 찾는 것은 슬라이딩 창으로 수행 할 수 있습니다.
Array_Slice는 배열에서 연속 요소를 추출하는 데 PHP에서 사용되는 함수입니다. 구문은 다음과 같습니다.
array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array
$ 배열 : 배열을 입력하십시오
$ 오프셋 : 시작 위치 (끝에서 시작할 음수를 지원)
$ 길이 : 길이를 가로 채기 (선택 사항)
$ preserve_keys : 원래 배열의 키 이름을 유지할지 여부는 기본적으로 보존되지 않습니다.
새 배열을 반환합니다.이 배열은 $ 오프셋 에서 시작하는 원래 배열의 $ 길이 요소 조각 인 새 배열을 반환합니다.
간결하고 명확 : 슬라이딩 창의 키는 매번 창 경계를 조정하는 것입니다. Array_Slice는 현재 창에서 요소를 빠르게 얻을 수 있으며 코드 로직은 간단하고 직관적입니다.
원래 배열을 수정하지 마십시오 : 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를 직접 호출하는 대신 두 포인터와 창에서 누적 된 값을 유지할 수 있습니다.
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를 사용하여 창의 움직임과 기능을 먼저 이해 한 다음 점차 최적화 기술을 학습하는 것이 좋습니다. 이 단계별로 아이디어를 마스터 할뿐만 아니라 효율적인 코드를 작성할 수 있습니다.