- ์ด๋ถํ์
- DP
- ์ํฐ๋
- golang
- ์น๋ฆฐ์ด
- ํ๋ก๊ทธ๋๋จธ์ค
- ํธ๋ฆฌ
- go
- ์์ฝ๋
- BFS
- Union-Find
- ์นด์นด์ค ์ฝํ
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- ํ๋ฆฌ์จ๋ณด๋ฉ
- ์๊ณ ๋ฆฌ์ฆ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- Python
- ๋ค์ต์คํธ๋ผ
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- DFS
- nestjs
- ์นด์นด์ค2021
- js
- C++
- ์ฌ๊ท
- ๋ฐฑ์ค
- ๋นํธ๋งต
- ๋นํธ๋ง์คํน
- LCs
- Today
- Total
Hello Ocean! ๐ผ
[CS/์๊ณ ๋ฆฌ์ฆ] ๊ฑฐ์ ์ ๋ ฌ๋ List์์ ์ด๋ค ์ ๋ ฌ์ด ๊ฐ์ฅ ํจ์จ์ ์ผ๊น? ๋ณธ๋ฌธ
[CS/์๊ณ ๋ฆฌ์ฆ] ๊ฑฐ์ ์ ๋ ฌ๋ List์์ ์ด๋ค ์ ๋ ฌ์ด ๊ฐ์ฅ ํจ์จ์ ์ผ๊น?
bba_dda 2021. 10. 9. 14:52์์ฝ
์ฝ์ ์ ๋ ฌ์ด ๋ฏธ๋ฆฌ ์ ๋ ฌ๋์ด์๋ ์๋ฃ๊ตฌ์กฐ์์ ๊ฐ์ฅ ๋น ๋ฅธ ์ฑ๋ฅ์ ๊ฐ์ง๋ค.
์?
๋ฒ๋ธ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋๊ฐ O(N^2)์ด๊ณ ,
ํต, ๋จธ์ง์ํธ๋ ๋ถํ -์ ๋ณต ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ๋ค.
์ ์ ๋ ฌ์ ๊ฐ๊ฒฉ์ด k๋ผ๊ณ ํ์ ๋, k๊ฐ 1์ด๋ ๋ ๊น์ง ์ค์ด๋ฉด์ ๋ฐ๋ณตํด์ผ ํ๋ฏ๋ก ์ด๋ฏธ ์ ๋ ฌ๋ ์๋ฃ๊ตฌ์กฐ์์๋ ์ฝ์ ์ ๋ ฌ๋ณด๋ค ๋น ๋ฅด์ง ์๋ค.
** ์ด์ง ์ฝ์
์ ๋ ฌ์ด ์ผ๋ฐ์ ์ธ ์ฝ์
์ ๋ ฌ๋ณด๋ค ๋ ๋น ๋ฅด๋ค๊ณ ๋งํ ์ ์๋ค.
list๋ด์์ ์ด๋ค ์์์ ์์น๋ฅผ ์ฐพ์ ๋, ์ฝ์
์ ๋ ฌ์ 1~n๋ฒ์งธ ์์๋ฅผ ๋ชจ๋ ๋์๊ฐ๋ฉด์ ๋ณด์ง๋ง,
์ด์ง ์ฝ์
์ ๋ ฌ์ ์ด ๊ณผ์ ์ ์ด์งํ์์ผ๋ก ์งํํด์ O(logN)์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ด๋ค.
** ์ธ์ด๋ณ ๊ธฐ๋ณธ ์ ๊ณต sorting ์๊ณ ๋ฆฌ์ฆ
Java : Tim Sort, dual pivot quicksort
Python : Tim Sort
C++ : Quick Sort ๋ณํ
** ๊ฐ ์ ๋ ฌ ๋ฐฉ์์ ์ด๋ค ์ํฉ์ ์ ํฉํ ๊น? (๋ํผ์
)
๋ฒ๋ธ : ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์
์ฝ์
: ๊ฑฐ์ ์ ๋ ฌ๋์ด ์๋ list์ ๋ํด ์ฌ์ฉ
ํฉ๋ณ : ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ O(NlogN)์ ๊ท ์ผํ ์๊ฐ๋ณต์ก๋๊ฐ ํ์ํ๋ฉฐ, ์ ๋ ฌ์ ํ์ํ ์ถ๊ฐ ๊ณต๊ฐ์ ๊ฐ๋นํ ์ ์์ ๋
ํต : ํ๊ท ์ ์ธ ์ํฉ์์ ์ต๊ณ ์ ์ ๋ ฌ
์ : ์ ๋ ฌ ์ค๊ฐ ๊ณผ์ ์์๋ ๊ฐ ์์๋ค์ด ๋๋ต์ ์ผ๋ก ์ ๋ ฌ๋์ด ์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์, ๋๋ต์ ์ธ ์์น๋ง์ ๋น ๋ฅด๊ฒ ์๊ณ ์ถ์ ๋ ์ฌ์ฉ
ํ : ํ์ ๋ง๋๋ ์ถ๊ฐ ๊ณต๊ฐ์ด ์์ผ๋ฉฐ, ์ต์๊ฐ, ์ต๋๊ฐ์์ ๊ฐ๊น์ด ๊ฐ์ ์ฐพ๊ณ ์ถ์ ๋ ๋ค๋ฅธ ์ ๋ ฌ์๋นํด ๋น ๋ฅผ ๊ฒ ๊ฐ๋ค.
๊ธฐ์ : ๊ธฐ์ํ
์ด๋ธ์ ๋ง๋ค๊ธฐ ์ํ ์ถ๊ฐ ๊ณต๊ฐ์ด ์์ผ๋ฉฐ, ์ค์๋ณด๋ค๋ ์ ์๋ค์ ๋น ๋ฅด๊ฒ ์ ๋ ฌํ๊ณ ์ถ์ ๋ ์ ์ฉ
- Bubble Sort ๋ฒ๋ธ์ ๋ ฌ
์๋ก ์ธ์ ํ ์์๋ฅผ ์ฐจ๋ก๋ก ๊ฒ์ฌํด ๋๊ฐ๋ฉด์ ์์๋ฅผ ๋ฐ๊พธ๋ฉด์ ์ ๋ ฌํ๋ ๋ฐฉ์์ด๋ค.
1,2 / 2,3 / 3,4 ... n-1,n ์์ผ๋ก ๋น๊ตํ๊ณ ๋ค์ 2,3/3,4/... ์์ผ๋ก ๋น๊ตํด๋๊ฐ๋ ๋ฐฉ์์ด๋ค.
ํ ๋ฒ ๋ฐ๋ณตํ ๋ ๋ง๋ค ๋ง์ง๋ง ํ๊ฐ๊ฐ ์ ๋ ฌ๋๋ค.
์์ฝ๊ฒ ๊ตฌํํ ์ ์์ง๋ง, ๋นํจ์จ์ ์ธ ๋ฐฉ์์ด๋ค
SWAP์ด MOVE๋ณด๋ค ๋ ๋ณต์กํ๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ์ฐ์ด์ง ์๋๋ค.
์๊ฐ๋ณต์ก๋ : O(N^2)
- Insert Sort ์ฝ์ ์ ๋ ฌ
k๋ฒ์งธ ์์๋ฅผ 1~k-1๋ฒ์งธ์ ์ซ์๋ค๊ณผ ๋น๊ตํด ์ ์ ํ ์์น์ ๋ผ์ ๋ฃ๊ณ , ๊ทธ ๋ค์ ์๋ฃ๋ฅผ ํ ์นธ์ฉ ๋ค๋ก ๋ฐ์ด๋ด๋ ๋ฐฉ์์ด๋ค.
์๋ฃ๊ตฌ์กฐ์ ๋ฐ๋ผ ๋ค๋ก ๋ฐ์ด๋ด๋ ๊ณผ์ ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆด ์ ์๋ค.
์ญ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ ๊ฒฝ์ฐ์ ์๊ฐ์ด ๋งค์ฐ ์ค๋ ๊ฑธ๋ฆฐ๋ค.
๋ฐ๋ฉด์ ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ์ ํ๋์ฉ ์ฝ์ /์ญ์ ํ๋ ๊ฒฝ์ฐ์๋ ์ต๊ณ ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ๋๋ค.
์๊ฐ๋ณต์ก๋ : ์ต์ O(N) / ํ๊ท ,์ต์ O(N^2)
- ๋ฒ์ธ ) ์ด์ง ์ฝ์
์ ๋ ฌ
- ์๋ก์ด ์์๊ฐ ์์นํ ๊ณณ์ ์ด์ง ํ์์ผ๋ก ์ฐพ๋ ๋ฐฉ์
- ์ฝ์ ๋ฐฉ์์์๋ ์์๊ฐ ์์นํ ๊ณณ์ ์ฐพ๋๋ฐ O(N)์ด ๊ฑธ๋ฆฐ๋ค๋ฉด, ์ด์ง ์ฝ์ ์ ๋ ฌ์ ํตํด O(logN) ์์ค์ผ๋ก ์ค์ฌ์ ์กฐ๊ธ ๋ ๋น ๋ฅด๊ฒ ์ํํ ์ ์๋ค.
- Merge Sort ํฉ๋ณ์ ๋ ฌ (๋ณํฉ ๋ฐฉ์)
์ฌ๋ฌ๊ฐ์ ์ ๋ ฌ๋ ์งํฉ์ ๋ณํฉํ์ฌ ํ๋์ ์ ๋ ฌ๋ ์งํฉ์ผ๋ก ๋ง๋๋ ๋ฐฉ์์ด๋ค.
๊ณต๊ฐ๋ณต์ก๋ : ์ ๋ ฌํ ์์๋ฅผ ์ ์ฅํ 2n๊ฐ์ ์ถ๊ฐ ๊ณต๊ฐ ํ์
์๊ฐ๋ณต์ก๋ : O(nlogn)
- Quick Sort ํต์ ๋ ฌ (๊ตํ ๋ฐฉ์)
ํ๊ท ์ ์ธ ์ํฉ์์ ์ต๊ณ ์ ์ ๋ ฌ์ด๋ค.
๊ฑฐ์ ๋ชจ๋ ์ธ์ด์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ์ ๋ ฌ ํจ์๋ ํต์ ๋ ฌ ํน์ ์ด๋ฅผ ๋ณํํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
์ ์ ํ ์์๋ฅผ ํผ๋ด์ผ๋ก ์ ํด์, ํผ๋ด๋ณด๋ค ์์ ๊ฒ์ ์์ผ๋ก, ํฐ ๊ฒ์ ๋ค๋ก ๋ณด๋ธ ํ ๋ค์ ๊ฐ๊ฐ์์ ํผ๋ฒ์ ์ ํด์ ๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ 0์ด๋ 1์ด ๋ ๋ ๊น์ง ์ํํ๋ค.
์๊ฐ๋ณต์ก๋ : O(nlogn) / ์ต์ O(n^2)
๋จธ์ง ํต ๋ชจ๋ ๋ถํ ์ ๋ณต ๋ฐฉ์์ด๋ค.
- Shell Sort ์์ ๋ ฌ
์ญ์์ ๊ฐ๊น์ธ์๋ก ์ต์ ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ณด์ด๋ ์ฝ์ ์ ๋ ฌ์ ํน์ง์ ๋ณด์ํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ด์ ์ ์์๋ฅผ ๋ชจ๋ ๋น๊ตํ๊ณ ๊ตํํ๋ ๊ฒ์ด ์๋๋ผ ์ผ์ ๊ฐ๊ฒฉ ์ฃผ๊ธฐ๋ก ๋์๋์ ๊ฒ์ฌํ๋ฉฐ์ ๊ตํํ๋ฉด์ ํ๊ฒ ์์์ ์์น๋ฅผ ๋๋ต์ ์ผ๋ก ์ก์์ฃผ๋ ๋ฐฉ์์ด๋ค.
์ด '๊ฐ๊ฒฉ'์ ์ค์ด๋ฉด์ ์ ๋ ฌํด๋๊ฐ๋ค๋ณด๋ฉด ์ ๋ ฌ๊ธฐ์ค์ ๊ฐ๊น์์ง๊ฒ ๋๋ฉฐ, ์ต์ข ์ ์ผ๋ก ๊ฐ๊ฒฉ์ด 1์ผ ๋ ๊น์ง ์งํํ๋ค๋ฉด ์ ๋ ฌ์ด ์๋ฃ๋๋ค.
์๊ฐ ๋ณต์ก๋ : O(N^(1.5))
์ฝ์ ์ ๋ ฌ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์, ์ฝ์ ์ ๋ ฌ๊ณผ ๋์ผํ ๋ณต์ก๋O(N^2)๋ฅผ ๊ฐ์ง์ง๋ง, ์คํ๊ฒฐ๊ณผ ์ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ O(N^(1.5))๋ฅผ ๋ฐ๋ฅธ๋ค๊ณ ํ๋ค.
- Heap Sort ํ์ ๋ ฌ
Heap ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด ์ ๋ ฌํ๋ ๋ฐฉ์์ด๋ค.
Heap : ์์ ์ด์ง ํธ๋ฆฌ์ ์ผ์ข ์ด๋ฉฐ, ์ฐ์ ์์ ํ๋ฅผ ์ํด์ ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ต๋๊ฐ/์ต์๊ฐ์ ์ฝ๊ฒ ์ถ์ถํ ์ ์๋ค
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ : ์ต๋ํ, ์ค๋ฆ์ฐจ์ ์ ๋ ฌ : ์ต์ํ ์ ๋ง๋ค์ด ์ด์ฉํ๋ฉด ๋๋ค.
์ ๋ ฌํด์ผํ ์์๋ค๋ก ํ์ ๋ง๋ ๋ค, ํ์์ ์์๋ฅผ ํ๋์ฉ ๊บผ๋ด์ ๋ฐฐ์ด์ ์์๋๋ก ์ ์ฅํ๋ฉด ๋๋ค.
- Radix Sort ๊ธฐ์์ ๋ ฌ
์ซ์๋ค์ ๋ฎ์ ์๋ฆฌ์(์ผ์ ์๋ฆฌ)๋ถํฐ ๋น๊ตํด์ ์ ๋ ฌํด๋๊ฐ๋ ๋ฐฉ์์ด๋ค.
์๊ฐ๋ณต์ก๋๋ ๋ฎ์ง๋ง, ๊ธฐ์ ํ ์ด๋ธ์ ๋ง๋ค๊ธฐ ์ํ ๊ณต๊ฐ์ด ์ถ๊ฐ๋ก ํ์ํ๋ค.
์๊ฐ๋ณต์ก๋ : O(dn) d: ์ซ์์ ์๋ฆฌ ์
์์ธํ ๋ด์ฉ : https://lktprogrammer.tistory.com/48
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/Python] 7579. ์ฑ (0) | 2021.10.12 |
---|---|
[๋ฐฑ์ค/Python] 20040. ์ฌ์ดํด ๊ฒ์ (0) | 2021.10.12 |
[CS/์๋ฃ๊ตฌ์กฐ] ์ด์ง ํ์ ํธ๋ฆฌ (BST) (0) | 2021.10.09 |
[๋ฐฑ์ค/Python] 1501. ์์ด ์ฝ๊ธฐ (0) | 2021.10.06 |
[๋ฐฑ์ค/Python] 12757. ์ ์ค์ JBNU (0) | 2021.10.06 |