๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ
๋ฐํ๋ช ๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค
Sorting?
์ ๋ ฌ(Sorting) : ๋ฐฐ์ด ์์๋ค์ ๋ฒํธ ์, ์ํ๋ฒณ ์ ๋ฑ ์ ํด์ง ์์๋๋ก ์ฌ๋ฐฐ์นํ๋ ๋ฌธ์
3 / 1 / 2 / 5 / 4 -> 1 / 2 / 3 / 4 / 5
Sorting Algorithms์๋ ํฌ๊ฒ
- ๊ธฐ๋ณธ์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ํ๊ท ์๊ฐ๋ณต์ก๋๊ฐ Θ(n^2)์ธ ์๊ณ ๋ฆฌ์ฆ๋ค
- Selection Sort, Insertion Sort, Bubble Sort
- ๊ณ ๊ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ํ๊ท ์๊ฐ๋ณต์ก๋๊ฐ Θ(nlogn)์ธ ์๊ณ ๋ฆฌ์ฆ๋ค
- Merge Sort, Quicksort, Heapsort
- ํน์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ํน์ํ ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋๊ฐ Θ(n)์ธ ์๊ณ ๋ฆฌ์ฆ๋ค
- Radix Sort, Counting Sort
๋ก ๋๋ ์ ์์
์ด๋ฒ ํฌ์คํ ์์๋ ๊ธฐ๋ณธ์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ 3๊ฐ์ง๋ฅผ ๋ค๋ฃฐ ์์ !
=> ๊ฐ sort์ ๋ณต์ก๋๋ฅผ ์ดํด๋ณผ๊ฑด๋ฐ ๋ณดํต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ swap ์ฐ์ฐ๊ณผ comparisons 2๊ฐ์ง๋ฅผ ๋ฐ์ง
Bubble Sort
์๋ฆฌ๋ ์ ๋ ฌ๋์ง ์์ ๊ฐ ์ค ์ต๋๊ฐ์ ๋งจ ๋ค๋ก ๋ณด๋ด๋ ๊ฒ์ ๋ฐ๋ณตํ์ฌ ์ ๋ ฌํ๋ ๊ฒ์ด๋ค!
=> ์ต๋๊ฐ์ ๋งจ ๋ค๋ก ๋ณด๋ด๊ธฐ ์ํด, ์ธ์ ํ ๋ ๊ฐ์ ๋ฐ๋ณตํ์ฌ ๋น๊ต ๋ฐ ๊ตํ
Best Case ์ผ ๋ ๋ชจ๋ ๋ฐฐ์ด ์์๋ค์ ์ ํด์ง ์์๋๋ก ๋ฐฐ์น๋์ด ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ swap ์ฐ์ฐ์ด ์ผ์ด๋์ง ์๋๋ค
=> 0
(์ธ์ ํ ๋ ๊ฐ์ if๋ฌธ์ผ๋ก ๊ณ์ ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋น๊ต ์ฐ์ฐ์ Θ(n^2) ์ผ๋ก ๋ณผ ์ ์์)
Worst Case ์ผ ๋ ๋ชจ๋ ๋ฐฐ์ด ์์๊ฐ ์ ํด์ง ์์์ ๋ฐ๋๋ก ๋ฐฐ์น๋์ด ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ฐ๋ณต ๊ณผ์ ์์ swap ์ฐ์ฐ์ด ์ผ์ด๋จ
=> Θ(n^2)
(์ธ์ ํ ๋ ๊ฐ์ if๋ฌธ์ผ๋ก ๊ณ์ ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋น๊ต ์ฐ์ฐ์ Θ(n^2) ์ผ๋ก ๋ณผ ์ ์์)
Average Case๋ ๋ชจ๋ ๋ฐฐ์ด ์์๊ฐ ๋ฌด์์๋ก ์ ๋ ฌ๋์ด ์์ ๋์ธ๋ฐ ํ๊ท ์ ์ผ๋ก swap์ ์ ๋ฐ ์ ๋ ๋ฐ์ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋จ
=> Θ(n^2)
(์ธ์ ํ ๋ ๊ฐ์ if๋ฌธ์ผ๋ก ๊ณ์ ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋น๊ต ์ฐ์ฐ์ Θ(n^2) ์ผ๋ก ๋ณผ ์ ์์)
Worst Case์ ๋นํด ์ค์ swap ์ฐ์ฐ์ Average Case์์ ์ ๋ฐ ์ ๋ ์ค ํ ๋ฐ ์์ํญ์ ์ ๊ฑฐํ๋ฉด ๊ฒฐ๊ตญ Θ(n^2)๋ก ๋์ผํจ
Selection Sort
์๋ฆฌ๋ ์ ๋ ฌ๋์ง ์์ ๊ฐ๋ค ์ค์์ ์ต์๊ฐ์ ์ฐพ์ ์์ ๋๋ ๊ฑธ ๋ฐ๋ณตํ๋ ๊ฒ์ด๋ค!
Best Case ์ผ ๋ ๋ชจ๋ ๋ฐฐ์ด ์์๋ค์ ์ ํด์ง ์์๋๋ก ๋ฐฐ์น๋์ด ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ swap ์ฐ์ฐ์ด ์ผ์ด๋์ง ์๋๋ค
=> ์ฆ, ์ฐพ์ ์ต์๊ฐ์ด ํ์ฌ ์ ํ๋ ๊ฐ๊ณผ ๋์ผํ๋ฏ๋ก swap์ด ๋ฐ์ํ์ง ์๊ธฐ์ 0
(์ต์๊ฐ์ด ๋ฌด์์ธ์ง ํ์ธํ๋ฌ ํ์ฌ ์ ํ๋ ๊ฐ์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ๋น๊ตํด์ผํ๊ธฐ ๋๋ฌธ์ ๋น๊ต ์ฐ์ฐ์ Θ(n^2) ์ผ๋ก ๋ณผ ์ ์์)
Worst Case ์ผ ๋ ๋ชจ๋ ๋ฐฐ์ด ์์๊ฐ ์ ํด์ง ์์์ ๋ฐ๋๋ก ๋ฐฐ์น๋์ด ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ฐ๋ณต ๊ณผ์ ์์ swap ์ฐ์ฐ์ด ์ผ์ด๋จ
=> ๋ก์ง์ swap ์ฐ์ฐ์ ์ต์๊ฐ์ ํ์ํ๊ณ ๋์ ํ ๋ฒ ๋ฐ์ํ๋ฏ๋ก n-1๋ฒ ์ฆ, Θ(n)
(์ต์๊ฐ์ด ๋ฌด์์ธ์ง ํ์ธํ๋ฌ ํ์ฌ ์ ํ๋ ๊ฐ์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ๋น๊ตํด์ผํ๊ธฐ ๋๋ฌธ์ ๋น๊ต ์ฐ์ฐ์ Θ(n^2) ์ผ๋ก ๋ณผ ์ ์์)
Average Case๋ ๋ชจ๋ ๋ฐฐ์ด ์์๊ฐ ๋ฌด์์๋ก ์ ๋ ฌ๋์ด ์์ ๋์ธ๋ฐ ๋ณดํต swap์ ์ ๋ฐ ์ ๋ ๋ฐ์ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋จ
(์ต์๊ฐ์ด ๋ฌด์์ธ์ง ํ์ธํ๋ฌ ํ์ฌ ์ ํ๋ ๊ฐ์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ๋น๊ตํด์ผํ๊ธฐ ๋๋ฌธ์ ๋น๊ต ์ฐ์ฐ์ Θ(n^2) ์ผ๋ก ๋ณผ ์ ์์)
Worst Case์ ๋นํด ์ค์ swap ์ฐ์ฐ์ Average Case์์ ์ ๋ฐ ์ ๋ ์ค ํ ๋ฐ ์์ํญ์ ์ ๊ฑฐํ๋ฉด ๊ฒฐ๊ตญ Θ(n)๋ก ๋์ผํจ
Insertion Sort
(๊ธฐ๋ณธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์์ bubble, selection ์ ๋นํด ์ ์ผ ๋ง์ด ์ฌ์ฉ๋๋ sort ๋ฐฉ์์)
์๋ฆฌ๋ ์ ๋ ฌ๋์ง ์์ ๊ฐ๋ค ์ค ํ๋๋ฅผ ๊ณจ๋ผ์, ์ด๋ฏธ ์ ๋ ฌ๋ ๊ฐ๋ค ์ฌ์ด์ ๋ผ์๋ฃ๊ธฐ๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ด๋ค!
=> ์ ์ ํ ์นธ์ฉ ์์ผ๋ก ๋ ๋ฐ๋จน๊ธฐ๋ฅผ ํ๋ฉด์ ๋ฐ๋ก ๋ฐ๋ก ์ ๋ ฌํ๋ค๊ณ ์๊ฐํ๋ฉด ์ดํด๊ฐ ์ฌ์ (์ ๋ ฌ๋ ์์ญ์ ํ์ฅํ๋ ๋๋)
Best Case ์ผ ๋ ๋ชจ๋ ๋ฐฐ์ด ์์๋ค์ ์ ํด์ง ์์๋๋ก ๋ฐฐ์น๋์ด ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ swap ์ฐ์ฐ์ด ์ผ์ด๋์ง ์๋๋ค
=> 0
(์ ํด์ง ์์๋๋ก ๋ฐฐ์น๋์ด ์์ผ๋ฏ๋ก ์์ญ์ ํ์ฅํ ๋๋ง ํ ๋ฒ์ฉ ๋ฐ๋ก ์ธ์ ํ ๊ฐ๊ณผ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๊ณ break ๋ฌธ์ ์ํด ๋ ์ด์ ๋น๊ต X)
=> Θ(n)
Worst Case ์ผ ๋ ๋ชจ๋ ๋ฐฐ์ด ์์๊ฐ ์ ํด์ง ์์์ ๋ฐ๋๋ก ๋ฐฐ์น๋์ด ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ฐ๋ณต ๊ณผ์ ์์ swap ์ฐ์ฐ์ด ์ผ์ด๋จ
=> Θ(n^2)
(๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ ์ธ์ ํ ๊ฐ๊ณผ ์๋ก ๋ค์ด์จ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ ๋ break์ ๊ฑธ๋ฆฌ์ง ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ฐ๋ณต ๊ณผ์ ์์ ๋น๊ต ์ฐ์ฐ์ด ์ผ์ด๋จ)
=> Θ(n^2)
Average Case๋ ๋ชจ๋ ๋ฐฐ์ด ์์๊ฐ ๋ฌด์์๋ก ์ ๋ ฌ๋์ด ์์ ๋์ธ๋ฐ ๋ณดํต swap์ ์ ๋ฐ ์ ๋ ๋ฐ์ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋จ
(๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ ์ธ์ ํ ๊ฐ๊ณผ ์๋ก ๋ค์ด์จ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๊ณ break๊ฐ ๊ฑธ๋ฆฌ์ง ์์ผ๋ฉด ํ์ฌ ์์ญ์์ ์ ๋ ฌ์ด ์๋ฃ๋ ๋ ๊น์ง ๊ณ์ ๋น๊ต๋ฅผ ํ๋ฏ๋ก Worst Case์ ๋นํด ์ ๋ฐ ์ ๋ ๋ ๋น๊ต์ฐ์ฐ์ด ์คํ๋๊ฒ ์ง๋ง ๊ฒฐ๊ตญ ์์๋ฅผ ์ ์ธํ๋ฉด ๋น๊ต ์ฐ์ฐ์ Θ(n^2) ์ผ๋ก ๋ณผ ์ ์์)
Worst Case์ ๋นํด ์ค์ swap ์ฐ์ฐ์ Average Case์์ ์ ๋ฐ ์ ๋ ์ค ํ ๋ฐ ์์ํญ์ ์ ๊ฑฐํ๋ฉด ๊ฒฐ๊ตญ Θ(n)๋ก ๋์ผํจ
๐ก Insertion Sort๋ ๋ฐฐ์ด์ด ๊ฑฐ์ ์ ๋ ฌ๋ ์ํ์ผ ๋(Best Case์ ๊ฐ๊น์ธ์๋ก) ๋งค์ฐ ํจ์จ์ ์ธ ๊ฒ์ ์ ์ ์์ ๐ก
'๐ฅ Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
L05 - Heapsort (2) | 2024.10.06 |
---|---|
L04 - Merge Sort & Quicksort (2) | 2024.09.27 |
L02 - Recurrences (1) | 2024.09.17 |
L01 - Algorithm Analysis (1) | 2024.09.14 |
์๊ฐ๋ณต์ก๋์ ๋๋ฒ๊น (3) | 2024.01.17 |