빠른 선택 알고리즘

빠른 선택 알고리즘은 정렬하지 않고 k번째로 작은 원소를 배열에서 선택한다 알고리즘의 선택·순위 알고리즘에 속하며, 데이터의 순서를 정하거나 특정 조건을 만족하는 값을 찾는 문제를 다룬다. 올바른 구현에서는 비교·키 표현과 알고리즘이 유지해야 하는 불변식을 먼저 정의한다.

분류알고리즘 · 선택·순위 알고리즘
해결 문제정렬하지 않고 k번째로 작은 원소를 배열에서 선택한다
핵심 동작퀵 정렬의 partition을 적용해 피벗이 들어간 위치를 구하고, k가 있는 한쪽 부분배열에 대해서만 반복한다
시간 복잡도평균 O(n)
추가 공간제자리 구현 가능
주요 전제명확한 키 순서와 k의 범위, 올바른 partition이 필요하다
대표 활용전체 정렬 없이 중앙값·상위 k의 경계값을 구할 때 유용하다
참고 자료MIT 강의 노트

빠른 선택 알고리즘은 정렬하지 않고 k번째로 작은 원소를 배열에서 선택한다 알고리즘의 선택·순위 알고리즘에 속하며, 데이터의 순서를 정하거나 특정 조건을 만족하는 값을 찾는 문제를 다룬다. 올바른 구현에서는 비교·키 표현과 알고리즘이 유지해야 하는 불변식을 먼저 정의한다.[1]

동작 원리는 다음과 같다. 퀵 정렬의 partition을 적용해 피벗이 들어간 위치를 구하고, k가 있는 한쪽 부분배열에 대해서만 반복한다. 무작위 피벗은 불리한 입력의 가능성을 줄인다. 구현에서 각 단계의 선택이 최종 결과의 올바른 순서·위치를 유지하는지 확인해야 한다. 반복 또는 재귀의 경계와 동일한 키를 가진 원소의 처리 역시 실행 결과에 영향을 준다.

시간·메모리 성질은 평균 O(n), 최악 O(n²); 피벗 규칙에 따라 다름 적용하려면 명확한 키 순서와 k의 범위, 올바른 partition이 필요하다 따라서 계산 복잡도는 원소 수뿐 아니라 입력의 정렬 상태, 키 범위 또는 비교·이동 비용처럼 알고리즘이 가정하는 자료 특성과 함께 분석해야 한다.

전체 정렬 없이 중앙값·상위 k의 경계값을 구할 때 유용하다. 중앙값의 중앙값 방법을 쓰면 최악 O(n) 선택을 달성할 수 있다. 동일한 목적의 다른 알고리즘과 비교할 때에는 안정성, 원소 이동의 양, 캐시 접근 패턴, 전처리 필요성과 최악 입력에서의 시간 비용을 함께 검토한다. 구체적인 계산 모델은 대상 자료구조 및 구현에 따라 달라진다.[2]

역사와 개발 배경

해결 문제와 전제

입력과 출력

비교·키 모델

알고리즘의 원리

기본 아이디어

단계별 처리

불변식

정확성

종료 조건

동일 키와 경계값

복잡도

시간 복잡도

공간 복잡도

입력별 성능

구현

자료 표현

의사 코드

최적화

유사 알고리즘과의 비교

활용 분야

관련 문서

  1. MIT Introduction to Algorithms ↩
  2. NIST DADS ↩