728x90
๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋ ํ๊ณ
์ ํธ๋ฆฌ๋ ์ด์ง ํธ๋ฆฌ์ด๋ค. (ํฌ๊ธฐ ๋น๊ต์ ๋ฐ๋ฅธ ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ์)
ํธ๋ฆฌ์ ๋ฆฌํ ์ L์ n๊ฐ์ ๊ฐ์ ์ ๋ ฌํ๋ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํฌํจํ๋ค.
- L = n! ≤ 2^h
- h ≥ log L = log(n!)
- (n/2)^(n/2) ≤ n! ≤ n^n
- log(n!) = Ω(n log n)
๋ฐ๋ผ์ ๋ ์์์ ๋น๊ต์ ๊ธฐ๋ฐํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ Ω(n log n)๋ณด๋ค ๋น ๋ฅผ ์ ์๋ค.
๋น๊ต์ ๊ธฐ๋ฐํ์ง ์์ ์ ๋ ฌ 1 : ๋ฒํท ์ ๋ ฌ
- ์ ๋ ฌ๋ ๋ฐ์ดํฐ๊ฐ ์๋ฆฟ์ ๊ฐ๋ ์ด ์๋ค๋ฉด, ์ด๋ฅผ ์ด์ฉํ๋ค.
- ์๋ฅผ ๋ค์ด ์ ๋ ฌ๋ ๋ฐ์ดํฐ๊ฐ ํ๋ฐฐ ์ฃผ์(~์ ~๊ตฌ ~๋)๋ผ๋ฉด, ์ฒ์ ์์น(~์)๋ง ๋ณด๊ณ ๋ ๋ฐ์ดํฐ ๋ถ๋ฅ๊ฐ ๊ฐ๋ฅ.
- ๋ถ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ ์ ๋ ฌํ๊ณ , ์ด๋ฅผ ์ด์ผ๋ฉด ์ ๋ ฌ ์๋ฃ
- ์๊ฐ ๋ณต์ก๋ :
- Best = c๊ฐ์ ๋ฒํท์ผ๋ก ๋ชจ๋ ์์๊ฐ ๊ท ๋ฑํ๊ฒ ๋ฐฐ๋ถ๋์ด ๊ฐ๊ฐ n/c๊ฐ๊ฐ ๋ค์ด๊ฐ์ ๋,
- n/c๊ฐ๋ฅผ O(n/c log (n/c)) ์๊ฐ์ ์ ๋ ฌ, ์ด c๊ฐ์ ๋ฒํท์ ๋ค์ ํฉ์น๋ฉด c(n/c) log(n/c) = n(log n/c) = n(log n - log c)
- Worst = ํ๋์ ๋ฒํท์ผ๋ก ๋ชจ๋ ์์๊ฐ ๋ชฐ๋ ธ์ ๋, ์ด ๊ฒฝ์ฐ๋ ๋ฒํท์ ์ฌ์ฉํ์ง ์์ ๊ฒ๊ณผ ๋์ผํ๋ค.
# stable sorting
- ๋ ์ด์์ ํค๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ .
- ์์์ (a, b)์ ์ ๊ธฐ์ค ์ ๋ ฌ vs ๋ค ๊ธฐ์ค ์ ๋ ฌ
- ์/๋ค ๊ธฐ์ค ์ ๋ ฌ ๋ชจ๋ ์ํ ์, ์์๊ฐ ๋ฐ๋์๋ ์๊ณ ์๋ฐ๋์๋ ์์
ex) 2์ฐจ์ ์ขํ๊ณ์ ์ ๋ค์ ๋ค์ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ๋ ฌํ์.
- x์ขํ์ ๋ฐ๋ผ ์ค๋ฆ์ฐจ์์ผ๋ก
- ๋ง์ฝ x์ขํ๊ฐ ๊ฐ๋ค๋ฉด y์ขํ์ ๋ฐ๋ผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ๋ผ.
# ์ ๋ ฌ ๋ฐฉ๋ฒ๊ณผ stable ์ฌ๋ถ
- ํต ์ ๋ ฌ
- ์ ๋ ฌ ๊ธฐ์ค์ด ๋งจ ์ฒ์ ์์๋ผ๋ฉด stable
- ์๋๋ผ๋ฉด ์ ๋ ฌ ๊ธฐ์ค๊ณผ ์๋ ์์์ ์์น๋ฅผ ๊ณ ๋ คํด์ผ ํจ
- ๋ฒ๋ธ ์ ๋ ฌ
- stable. ๋ ํค ๊ฐ์ด ๊ฐ์ ๋ ์์น๋ฅผ ๋ฐ๊พธ์ง ์์
- ์ฝ์
์ ๋ ฌ
- stable
- ๋ณํฉ ์ ๋ ฌ
- stable
- ํ ์ ๋ ฌ
- not stable. ์์ ์ ๋ณด๊ฐ ํ์ ๋ค์ด๊ฐ๋ ํ๊ดด๋จ.
- ๊ธฐ์ ์ ๋ ฌ
- stable
๋น๊ต์ ๊ธฐ๋ฐํ์ง ์์ ์ ๋ ฌ 2 : ๊ธฐ์ ์ ๋ ฌ (radix sort)
์์ ํ ๋น๊ต๋ฅผ ์ ์ธํ ์ ๋ ฌ.
๋ฎ์ ์๋ฆฌ์์ ๋์ ์๋ฆฌ๋ก ๊ธฐ์ค์ ๋ฐ๊พธ์ด๊ฐ๋ฉด์ ์ ๋ ฌํจ.
- ์ค์ ์ ๋ ฌ์ด๋ผ๊ธฐ ๋ณด๋ค๋, 0~9๊น์ง์ ๋ฒํท์ ์ซ์๋ฅผ ๋ฃ์ด๊ฐ๋ค๋ ๊ฐ๋
- ๋ฆฌ์คํธ๋ฅผ ์ฐจ๋ก๋ก ์ฝ์ด๋๊ฐ๋ฉด์ ์์๋ฅผ ์งํค๋ฏ๋ก stable
- ์๊ฐ ๋ณต์ก๋ : ์ซ์๊ฐ r ์๋ฆฟ์์ด๊ณ ์ ๋ ฌ๋ ์๊ฐ n๊ฐ์ผ ๋ → O(rn)
๋น๊ต์ ๊ธฐ๋ฐํ์ง ์์ ์ ๋ ฌ 3 : ๊ณ์ ์ ๋ ฌ (counting sort)
๋ฒ์๊ฐ ์์ ์๋ค์ ๋น ๋ฅด๊ฒ ์ ๋ ฌ.
- ๊ฐ ์๊ฐ ๋์จ ํ์๋ฅผ ์ผ๋ค.
- 1์ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ์๋ณด๋ค ์์ ์ซ์๊ฐ ๋ช ๊ฐ ์๋์ง ์ผ๋ค.
- 2์ ๊ฒฐ๊ณผ๋ก, ํน์ ํ ์๊ฐ ์์ํ๋ ์์น๋ฅผ ์ ์ ์๋ค.
ex) {5, 9, 3, 6, 9, 5, 2, 10, 1}
- ์๊ฐ ๋ณต์ก๋ : n๊ฐ์ ์ซ์๋ฅผ ์ ๋ ฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ O(n)
- ๊ฐ ์ซ์๊ฐ ๋์จ ํ์๋ฅผ ์ธ๋๋ฐ O(n)
- ์ด๋ ์ซ์๋ค์ ๋ฒ์๊ฐ ์ข์์ O(1) ์๊ฐ์ ์ฐพ์๊ฐ ์ ์๊ธฐ ๋๋ฌธ
- ๋ค์ ์ซ์๋ฅผ ์ ๋ ฌ๋ ๋ฆฌ์คํธ์ ์ฑ์๋ฃ๋๋ฐ์ O(n)
- ๋ง์ฝ ์ซ์๋ค์ ๋ฒ์๊ฐ ํฌ๋ค๋ฉด?
- (์ต๋๊ฐ - ์ต์๊ฐ)์ ๋ฒ์ ์๋ง๋ค ํญ๋ชฉ ํ๋๊ฐ ํ์
- S๊ฐ ์ซ์ ๋์จ ํ์๋ฅผ ์ธ๋ ํ ์ด๋ธ์ด๋ผ๋ฉด, ์ด ํ ์ด๋ธ์ ๋ค์ ์ฝ์ด์ผํ๋ฏ๋ก ์ ํํ ์๊ฐ ๋ณต์ก๋๋ O( n+|S| )
์ ํ ๋ฌธ์
- ์ฃผ์ด์ง n๊ฐ์ ์์ ์ค์์, ํฌ๊ธฐ ์์ผ๋ก k๋ฒ์งธ ์์๋ฅผ ์ฐพ๋ ๋ฌธ์
- ํด๋ฒ : ์์๋ฅผ ํฌ๊ธฐ ์์ผ๋ก ์ ๋ ฌํ๋ฉด ๋ฐ๋ก ํ ์ ์๋ค.
- ์ ๋ ฌ์ ์ ํ๋ณด๋ค ์ด๋ ค์ด ๋ฌธ์ .(๋ชจ๋ ์์์ ์์๋ฅผ ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.) ์ ๋ ฌ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ O(n log n)๋ณด๋ค ๋นจ๋ฆฌ ํ ์ ์๋๊ฐ?
- ํต ์ ๋ ฌ์ ์์ฉ
- ๊ธฐ์ค ๋ฑ์๊ฐ k๋ฑ ์ผ๋, ๊ธฐ์ค์ด ์ํ๋ ๋ต.
- ๊ธฐ์ค ๋ฑ์๊ฐ k๋ณด๋ค ํด ๋, ๊ธฐ์ค๋ณด๋ค ์์ ์์๋ค ์ค์์ k๋ฑ์ ๊ณ ๋ฅด๋ฉด ๋๋ค.
- ๊ธฐ์ค ๋ฑ์๊ฐ k๋ณด๋ค ์์ ๋, ๊ธฐ์ค๋ณด๋ค ์์ ์์๋ค์ด a๊ฐ ์๋ค๋ฉด, ๊ธฐ์ค๋ณด๋ค ํฐ ์์๋ค ์ค์์ k-(a+1)๋ฑ์ ๊ณ ๋ฅด๋ฉด ๋จ (์ด ์์์ ์ผ์ชฝ์ a+1๊ฐ์ ์์ ์กด์ฌ)
- ํต ์ ๋ ฌ์์, ํญ์ ํ ๊ธฐ์ค ์์์ ๋ฑ์๊ฐ ๊ฒฐ์ ๋จ.
- ์๊ฐ ๋ณต์ก๋ : ๊ธฐ์ค๊ฐ์ ์ํด์ ์ด๋ป๊ฒ ๋ฒ์๊ฐ ๋๋์ด์ง๋์ง์ ๋ฐ๋ผ ๋ค๋ฆ
- Best : T(n) = T(n/2) + n = O(n)
- Worst : T(n) = T(n-1) + n = O(n^2)
- ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ T(n) = T((99/100)n + n) = O(n)
728x90
'๐ ์ ๊ณต ๊ณต๋ถ > ์๊ณ ๋ฆฌ์ฆ ํด์ ๋ฐ ์ค๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] Greedy algorithm - ์ด์งํธ ๋๋์ (cpp) (0) | 2023.02.09 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ์ ์ต์ ์ฑ (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] ๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ ๋ฌธ์ (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] ์ ํ์์ ์ดํด(recurrence relation) (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ ๋ฐ ์ ์ (0) | 2023.01.16 |