일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 슬픔
- python 강의
- 라즈베리파이 모니터
- 라즈베리파이
- 라즈베리파이3
- BOJ
- 강좌
- python 강좌
- C++
- it
- 프로그래밍
- python
- 2020
- 철학
- mmdetection
- 자작시
- 파이썬 강의
- 계획
- 파이썬
- 공부
- dynamic programming
- 다이나믹프로그래밍
- 백준
- 강의
- 머신러닝
- mmcv
- dp
- 2021
- 알고리즘
- 파이썬 강좌
Archives
- Today
- Total
Stargazer
[알고리즘] Inplace-Quick sort 이론 간략 정리 본문
Undergraudate basics(학부생 기초)/자료구조, 알고리즘
[알고리즘] Inplace-Quick sort 이론 간략 정리
COM2IT 2022. 3. 30. 23:31반응형
추가 공간을 일반 퀵소트보다 줄이는 알고리즘
추가 공간: $O(n)$->$O(1)$( 재귀적일때는 $O(lgn)$을 사용)
전략은 이전 퀵소트와 같이, 분할 정복을 이용할 것이다.
다만 공간을 추가적으로 사용하지않고, 해야하므로, 요소끼리 스위칭하는 방식으로 해야한다.
In-place Quick sort 수도코드:
Algorithm inPlaceQuickSort S, l, r
Input sequence S , ranks l and r
Output sequence S with the
elements of rank between l and r
rearranged in increasing order
if l >= r
return
i <- a random integer between l and r // pivot index
x <- S.elemAtRank(i) //pivot
(h, k) <- inPlacePartition(x) // divide & conquer
inPlaceQuickSort(S, l, h - 1) // recursive(left - L)
inPlaceQuickSort(S, k + 1, r) // recursive(right - E U G)
알고리즘:
인덱스 j, k 를 sequence 각 양끝에 설정하고,
시퀀스 안에서 랜덤으로 pivot을 정해 뽑은 후, p라고 할때
S[h] < p, S[k] >p 이면 계속 인덱스를 j= j + 1, k= k - 1 한다.
만약 조건이 성립하지 않는게 j , k 중 1개 나오면, 다른 나머지도 성립하지 않을때까지 이동.
이동 후에 그 둘의 위치를 swap하고, 다시 인덱스를 이동하면서 pivot과 값을 비교
이를 j = k가 될때까지 반복한다.
예시 코드
Algorithm inPlacePartition(x)
Input pivot x
Output index h, k
h <- 0
k <- S.size
while h != k
if S[h] < x
h <- h+1
if S[k] >= x
k <- k-1
if S[h] >= x and S[k] < x
temp <- S[h]
S[h] <- S[k]
S[k] <- temp //swap
return (h,k)
이렇게 되면, $L$과 $E\cup G$의 형태로 분할과 동시에 정렬할 수 있다.
(L: pivot보다 작은 그룹, EUG: pivot과 같거나 큰 그룹)
파티션을 나누는 과정에서 pivot은 정렬이 되었다고 볼 수 있기 때문에
재귀적으로 호출하게 되면, 분할정복이 가능해진다.
(시퀀스 요소가 1개면 정렬이 되었다고 볼수 있기 때문)
반응형
'Undergraudate basics(학부생 기초) > 자료구조, 알고리즘' 카테고리의 다른 글
[백준] 12865번: 평범한 배낭 C++ (0) | 2022.05.11 |
---|---|
[백준] 13549번 : 숨바꼭질 3 C++ 풀이 (0) | 2022.05.10 |
[알고리즘] Mergesort (합병 정렬) 이론 간략 정리 (0) | 2022.03.30 |
[알고리즘] Quick sort(퀵소트) 이론 정리 (0) | 2022.03.29 |
[자료구조] 트리 후위순회 결과와 깊이 순서로 트리 구조 구하기 (0) | 2021.04.23 |
Comments