Kadane의 알고리즘을 사용한 최대 하위 배열 합계 문제 설명
그래서 이 점을 염두에 두고 동적 프로그래밍 관련 문제를 해결하기 시작했고 처음에는 Kadane의 알고리즘으로 쉽게 해결할 수 있는 The Maximum Subarray Sum 문제에 대해 알게 되었습니다. 오늘 저는 이 알고리즘에 대해 논의하고 이를 통해 문제를 해결하고자 합니다.
먼저 문제에 대한 설명을 알려주십시오. 그것은 말한다
We are given an integer array, we need to find the contiguous subarray that has the largest sum and return that sum. For example: [-2,1,-3,4,-1,2,1,-5,4] is an array. Here the subarray [4,-1,2,1] has the largest sum which is 6.
이제 Kadane의 알고리즘이 말하는 것을 살펴보겠습니다.
current_sum
를 0으로, max_sum
를 현재 위치의 합계와 해당 배열의 최대 합계를 나타내는 최소 음수 값으로 초기화합니다. current_sum
가 있는 해당 요소의 합계 사이의 최대값을 current_sum
로 할당합니다. max_sum
와 current_sum
사이의 최대값을 max_sum
로 할당합니다. max_sum
를 반환합니다.여기서 나는 C++로 문제를 해결하고 싶지만 당신은 어떤 언어를 선택할 자유가 있습니다.
int findMaxSum(vector<int>& nums) {
int max_sum = INT_MIN;
int current_sum = 0;
for(int n:nums) {
current_sum = max(n, current_sum + n);
max_sum = max(max_sum, current_sum);
}
return max_sum;
}
aaray의 총 요소 수인 n번 동안 실행되는 단일 루프가 있으므로 실행 시간 복잡도는 O(n)입니다. 동시에 외부 데이터 구조가 필요하지 않기 때문에 공간 복잡도는 O(1)입니다.
따라서 Kadane의 알고리즘을 사용하여 최대 하위 배열 합계 문제를 해결했습니다. 이제 우리의 접근 방식이 동적 프로그래밍과 어떻게 유사한지 살펴보겠습니다. 동적 프로그래밍 방식에서는 주요 문제를 더 작은 문제 그룹으로 나누고 이러한 작은 문제의 각 솔루션을 다시 활용하여 다시 계산할 필요가 없도록 하는 메모이제이션(memoization)이라고 합니다. 여기에서 각 배열 요소와 현재 합계 사이의 최대값을 계산하고 해당 요소 인덱스의 현재 합계로 최대값을 할당했습니다. 그런 다음 해당 위치의 현재 합계와 최대 합계를 비교하고 그 사이의 최대값을 최대 합계로 할당했습니다. 따라서 모든 단계에서 문제를 해결하고 이전에 계산한 결과를 다시 활용했습니다. 따라서 우리는 솔루션에서 동적 프로그래밍 접근 방식을 사용했습니다.
동적 프로그래밍 접근 방식을 이해하고 구현하는 것은 매우 어렵지만 정기적인 연습과 약간의 노력을 통해 달성할 수 있습니다. 나는 우리가 아주 좋은 개발자가 되기 위해 문제 해결을 시작하기를 바랍니다.
즐거운 코딩!!!
Reference
이 문제에 관하여(Kadane의 알고리즘을 사용한 최대 하위 배열 합계 문제 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alim1496/explaining-maximum-subarray-sum-problem-with-kadanes-algorithm-11im텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)