선택 알고리즘이란?

n개 중 i번째로 작은 원소를 찾는 알고리즘

 

방법 1

1. 퀵 정렬을 사용해서 pivot 기준으로 작으면 왼쪽, 크면 오른쪽으로 나눈다.

2. 

  • pivot의 위치가 i보다 크면 왼쪽 집단에서 다시 퀵 정렬을 수행
  • pivot의 위치가 i보다 작으면 오른쪽 집단에서 다시 퀵 정렬을 수행
    • 이때, 오른쪽의 맨 앞의 원소를 0번째라고 하면 i-k째 원소를 찾아야함
  • pivot의 위치가 i와 같으면 pivot을 반환

이 방법의 경우 최악의 경우(pivot이 집단의 제일 작거나 큰 값으로 선택됐을 경우)에는 $ \Theta (n^2) $ 의 시간복잡도를 가진다.

 

방법2

1. 원소를 5개씩 그룹으로 만들고 각 그룹의 중간값을 찾는다.                             => $ \Theta (n) $

2. 각 그룹의 중간값의 중간값 M을 찾는다.                                                     => $ T ( \lceil{ n \over 5 }) $

3. M보다 큰 경우는 최소 $ {3 \over 5} x {n \over 2} - 2 = {3n \over 10} - 2 $  

   나머지 경우는 $ n - ({3n \over 10} - 2) = {7n \over 10} + 2 $

   따라서 M보다 큰 값인지 작은 값인지 알 수 없는 경우는 최대 $ {7n \over 10} + 2 $  => $ T({7n \over 10} + 2)

==> 시간 복잡도

 

'22-1학기 > 알고리즘' 카테고리의 다른 글

5. 검색 트리  (0) 2022.04.06
3. 정렬  (0) 2022.03.22
2. 점화식과 알고리즘 복잡도 분석  (0) 2022.03.14
1. 알고리즘 표기법  (0) 2022.03.14

+ Recent posts