티스토리 뷰
부경대 IT융합응용공학과 권오흠 교수님의 영리한 프로그래밍을 위한 알고리즘 강좌와 '쉽게 배우는 알고리즘: 관계중심의 사고법 - 문병로'등을 통한 알고리즘 학습 강좌 링크
3-8. Radix Sort
Counting sort와 마찬가지로 non-comparison Sort이다.
Radix Sort의 기본가정
ex) n개의 d자리 정수들 - 길이가 d인 문자열이며 각각의 문자들이 가질수 있는 값의 갯수가 상수개 이다.
꼭, 정수일 필요는 없으며 길이가 d인 영문자도 가능하다.
가장 낮은 자리수부터 정렬한다.
d=3, n=7
각각의 단계가 진행될 때, 반드시 stable해야 한다.
"입력에 동일한 값이 있을때 입력에 먼저 나오는 값이 출력에서도 먼저 나온다."라는 성질을 만족해야 한다.
예를 들어서, 두번째 단계에서 세번째 단계로 넘어갈 때, 720 다음에 329가 와야한다. 순서가 바뀌면 stable하지 않게 되고, radix sort는 성립하지 않게 된다.
매 단계에서 사용하는 정렬 알고리즘은 Stable Sort여야 한다!
각 자리마다 정렬하는데 counting sort를 사용한다. (0 ~ 9까지)
십의자리를 정렬하는데, 십의자리와 일의자리까지 정렬되는 것은, 매 단계가 Stable하게 정렬되기 때문이다. 이것이 Radix Sort의 핵심이다.
pseudo code
A배열은 d자리 정수들의 배열이다.
stable sort 알고리즘을 Counting Sort를 쓴다면, 이것의 시간복잡도는 n+k였으므로,(n은 데이터의 갯수, k는 데이터들이 가질 수 있는 값의 수. 여기서 k는 0 ~ 9이므로 10, 알파벳이라면 26)
시간복잡도는 O(d(n+k))이며, k << n이면 O(dn)이고, d가 n보다 작고 상수라면 시간복잡도는 O(n)으로 볼 수 있다.
따라서, k << n 이며 d가 상수라는 조건을 만족한다면, Radix Sort는 선형시간(linear time) 알고리즘이다.
Radix-Sort(A, d)
for i <- 1 to d
do use a stable sort to sort array A on digit i
정렬 알고리즘들
bubble, insertion, selection의 경우 최악의 경우나 평균 경우나 모두 n^2의 시간복잡도를 가진다.
quick sort는 최악의 경우 n^2이지만 평균적으로 nlogn의 시간복잡도를 가지는 특이한 정렬 알고리즘이다.
merge, heap sort는 둘다 최악의 경우에도 nlogn의 시간복잡도를 가지며, 이것은 최선이다. comparison sort의 시간복잡도는 nlogn보다 더 낮을 수는 없다.
counting과 radix sort의 시간복잡도는 k와 d값에 따라 달라지는데, d가 상수이고 k << n 이라면 이것은 Θ(n)이라고 말할 수 있다.
'ICT Eng > Algorithm' 카테고리의 다른 글
[Algorithm] 알고리즘을 위한 자바 Java IO (1) | 2018.02.06 |
---|---|
[Algorithm] 3-9. Sorting in Java (0) | 2018.01.31 |
[Algorithm] 3-7. Counting Sort - 선형시간 알고리즘 (0) | 2018.01.29 |
[Algorithm] 3-6. 정렬의 하한(lower bound) (1) | 2018.01.26 |
[Algorithm] 3-5. 우선순위 큐(priority queue) (0) | 2018.01.26 |
- Total
- Today
- Yesterday
- Spring
- Vue.js
- 알고리즘
- github
- Recursion
- ORM
- Algorithm
- IT융합인력양성사업단
- 무선통신소프트웨어연구실
- AWS
- 레드블랙트리
- 시간복잡도
- RBT
- 순환
- 자바
- 젠킨스
- 스프링부트
- JPA
- springboot
- 인프런
- 정렬
- Raspberry Pi
- Spring Boot
- vuejs
- Java
- Wisoft
- 한밭대학교
- 한밭이글스
- 라즈베리파이
- vuex
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |