위키득계정 ↗
기술

자비스 행진

자비스 행진기술
영어
Jarvis march
다른 이름
Gift wrapping algorithm
진행 방식
경계의 다음 꼭짓점을 반복 선택
시간 복잡도
O(nh)
자비스 행진은 평면 점 집합의 볼록 껍질을 바깥쪽 꼭짓점부터 하나씩 이어 만드는 알고리즘이다. 각 단계에서 전체 점을 살펴 다음 경계점을 고르며 입력점 수 n과 껍질 꼭짓점 수 h에 대해 O(nh) 시간이 걸린다.

경계를 감싸며 진행

가장 왼쪽에 있는 점처럼 확실히 경계에 놓인 점에서 시작한다. 현재 점에서 모든 다른 점을 비교해 다음 바깥 경계점을 선택한다. 선택한 점으로 이동하여 같은 작업을 반복하고 출발점으로 돌아오면 경계를 완성한다.

다음 점의 선택

두 후보가 만드는 방향을 비교하여 모든 입력점이 한쪽에 놓이도록 경계 방향을 고를 수 있다. 점들이 같은 방향의 직선 위에 놓이면 끝점을 잘못 고르지 않도록 더 먼 점을 선택하는 처리가 필요하다. 중복점과 경계 위 점의 포함 정책도 함께 정한다.

출력 크기에 따른 비용

경계 꼭짓점 하나를 정할 때 n개 점을 살피고 이를 h번 반복하므로 O(nh)다. 경계 꼭짓점 수가 작으면 유리할 수 있지만 모든 점이 경계에 놓여 h가 n에 가까우면 제곱 시간까지 늘어난다. 입력점 수만으로 언제나 빠르다고 판단할 수는 없다.

그레이엄 스캔과 비교

그레이엄 스캔은 점들을 먼저 정렬한 뒤 스택으로 후보를 제거한다. 자비스 행진은 전체 각도 정렬을 선행하지 않고 다음 경계점을 반복해서 찾는다. 두 방법을 비교할 때 입력점 수뿐 아니라 최종 경계의 꼭짓점 수와 퇴화 배치의 처리도 살펴야 한다.

관련 문서

그레이엄 스캔 / 볼록 껍질 / 시간 복잡도 / 최악의 경우 분석 / 볼록집합 / 정렬 알고리즘