위키득계정 ↗
기술

모노톤 체인

모노톤 체인기술
영어
Andrew’s monotone chain
정렬 기준
x좌표와 같은 x에서의 y좌표
핵심 구성
위쪽 경계와 아래쪽 경계
시간 복잡도
O(n log n)
모노톤 체인은 평면의 점들을 좌표의 사전식 순서로 정렬하고 위쪽과 아래쪽 경계 사슬을 만들어 볼록 껍질을 구하는 알고리즘이다. 앤드루의 알고리즘이라고도 하며 일반적인 비교 정렬을 사용하면 O(n log n) 시간이 걸린다.

좌표 순서로 정렬

점을 먼저 x좌표의 오름차순으로 정렬하고 x가 같으면 y좌표로 순서를 정한다. 가장 왼쪽과 오른쪽의 끝점을 연결하는 위쪽 경계와 아래쪽 경계를 구성한다. 기준점에 대한 극각으로 정렬하는 그레이엄 스캔과 초기 정렬 기준이 다르다.

각 사슬의 후보 제거

정렬된 점을 순서대로 보면서 마지막 두 후보와 새 점의 회전 방향을 검사한다. 구성 중인 경계의 볼록성에 맞지 않으면 마지막 후보를 제거하고 다시 검사한다. 점 하나를 추가하기 전에 여러 후보가 빠질 수 있지만 각 후보가 제거되는 횟수는 제한된다.

두 경계 합치기

위쪽과 아래쪽 사슬을 이어 붙이면 볼록 껍질의 경계 순서를 얻는다. 두 끝점은 양쪽 사슬에 공통으로 포함되므로 반환 목록에서 중복되지 않도록 처리한다. 모든 점이 공선인 경우에도 같은 점들을 두 번 나열하지 않도록 별도로 살펴야 한다.

계산량과 경계 정책

정렬 뒤 각 사슬의 추가와 제거 작업 총량은 O(n)이므로 일반적인 정렬 비용이 전체 O(n log n)을 결정한다. 변 위의 중간 점을 모두 반환할지 양 끝 꼭짓점만 남길지에 따라 공선 판정의 처리가 달라진다. 빈 입력과 중복 좌표 같은 경우도 반환 규칙을 명확히 정할 필요가 있다.

관련 문서

그레이엄 스캔 / 자비스 행진 / 볼록 껍질 / CCW 판정 / 스택 / 시간 복잡도 / 분할 상환 분석