수열 삽입과 정렬로 최대 연속 부분합 최소화하기

수열 삽입과 정렬로 최대 연속 부분합 최소화하기

초록

본 논문은 실수 수열 A에 대해 (1) 하나의 값 x를 삽입해 최대 점수 연속 부분수열의 합을 최소화하는 ISS 문제를 O(n) 시간·공간으로 해결하는 알고리즘을 제시하고, (2) 수열 A를 재배열해 동일 목표를 달성하는 SSS 문제는 강 NP‑Hard임을 증명하고 2‑근사 알고리즘을 제공한다는 내용이다.

상세 분석

ISS 문제는 직관적으로 “x를 어느 위치에 넣으면 전체 수열의 최대 연속 부분합이 가장 작아지는가”를 묻는다. 기존에는 n개의 삽입 위치마다 Kadane 알고리즘을 적용해 O(n²) 시간을 요구했지만, 저자들은 삽입 전후의 최대 부분합 구조를 사전 계산함으로써 선형 시간에 최적 위치를 찾는다. 핵심 아이디어는 (i) 원수열 A의 모든 접두합과 접미합을 한 번에 구해 각 구간의 최대 부분합을 구간별로 저장하고, (ii) x를 삽입했을 때 영향을 받는 구간은 삽입점 좌측의 접미합과 우측의 접두합만이라는 점을 이용한다는 것이다. 이를 통해 각 후보 위치마다 O(1) 연산으로 새로운 최대 부분합을 평가할 수 있다. 알고리즘은 두 개의 배열—전방 최대 접미합과 후방 최대 접두합—을 이용해 삽입 후 전체 최대값을 즉시 계산하고, 최소값을 주는 위치를 반환한다. 공간은 O(n)이며, 실제 구현 시 스캔을 두 번만 하면 된다.

SSS 문제는 “수열을 어떤 순서로 배열하면 최대 연속 부분합이 최소가 되는가”를 묻는다. 저자들은 이를 3‑Partition 문제에 귀환함으로써 강 NP‑Hard임을 증명한다. 구체적으로, 각 원소를 양수와 음수로 적절히 배치해 부분합이 0이 되는 구간을 강제로 만들게 함으로써, 최적 해가 존재하려면 원래의 3‑Partition 인스턴스가 해를 가져야 함을 보인다. 따라서 다항식 시간 알고리즘은 존재하지 않는다.

근사 알고리즘은 “양수와 음수를 각각 정렬한 뒤 교차 배치”하는 단순한 전략을 사용한다. 먼저 모든 양수를 내림차순, 음수를 오름차순 정렬하고, 양수‑음수‑양수‑음수… 순으로 교차 배치한다. 이 방법은 각 구간의 합이 크게 폭발하는 것을 방지하고, 최적 해 대비 최대 2배 이하의 최대 부분합을 보장한다. 증명은 각 구간의 합을 상한과 하한으로 묶어, 최적 해와 비교했을 때 차이가 2배를 초과하지 않음을 수학적으로 전개한다. 이 근사 비율은 이론적으로 최선은 아니지만, 구현이 간단하고 실무에서 충분히 좋은 성능을 제공한다는 점에서 의미가 크다.

전체적으로 논문은 네트워크 버퍼 관리라는 실용적 동기를 가지고, 두 문제에 대해 복잡도 분석과 효율적 알고리즘을 제시함으로써 이론과 응용을 연결한다. 특히 ISS 문제의 선형 알고리즘은 기존 O(n²) 접근법을 크게 개선했으며, SSS 문제의 강 NP‑Hard 증명은 문제의 본질적 어려움을 명확히 한다. 2‑근사 알고리즘은 근사 이론과 실제 구현 사이의 간극을 메우는 좋은 사례라 할 수 있다.