평균 선형 시간 선택 알고리즘

select(A, p, r, i)
{
	if (p=r) then return A[p];
	q ← partition(A, p, r);
	k ← q-p+1;
	if (i<k) then return select(A, p, q-1, i);
	else if (i=k) then return A[q];
	else return select(A, q+1, r, i-k);
}

quick sort와 비슷한 모양새를 가지고 있다.

평균적으로 $\Theta(n)$의 시간이 소요되지만

최악의 경우 $\Theta(n^2)$의 시간이 소요된다.

 

최악의 경우 선형 시간 선택 알고리즘

linearSelect(A, p, r, i)
{
	1. 원소의 총수가 5개 이하이면 i번째 원소를 찾고 알고리즘을 끝낸다.
	2. 전체 원소를 5개씩 원소를 가진 n/5개의 그룹으로 나눈다.
	3. 각 그룹에서 중앙값을 찾는다.
	이렇게 찾은 중앙값들을 m_1, m_2, ..., m_{n/5}이라 하자.
	4. m_1, m_2, ..., m_{n/5}의 중앙값 M을 재귀적으로 구한다.
	5. M을 기준원소로 삼아 전체 원소를 분할한다.
	6. 분할된 두 그룹 중 적합한 쪽을 선택해 1~6을 재귀적으로 반복한다.
}

 

'쉽게 배우는 알고리즘' 카테고리의 다른 글

07 해시 테이블  (1) 2018.10.21
06 검색 트리  (0) 2018.10.21
04 정렬 (2)  (0) 2018.10.21
04 정렬 (1)  (0) 2018.10.21
03 점화식과 알고리즘 복잡도 분석  (0) 2018.10.20

+ Recent posts