์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- database
- K๋ฐฐํฐ๋ฆฌ
- ์ฝ๋ฉ
- ๋ฆฌ์กํธ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- JavaScript
- ์๋ฐ์คํฌ๋ฆฝํธ
- ComputerScience
- ๋ฐ์ํ
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ํ๋ก๊ทธ๋๋ฐ
- ์นํผ๋ธ๋ฆฌ์ฑ
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- Python
- ๋ ์
- ๋ผํ๋ผ์ค์๋ง๋
- css
- ๊ฐ๋ฐ
- ํ์ด์ฌ
- ์ค๋ธ์
- ์ฑ
- html
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ์ค๋ผํด
- ์ํ
- ์๋ฐ
- Java
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- ์ปดํจํฐ๊ณผํ
- Today
- Total
JiYoung Dev ๐ฅ
[ํ์ด์ฌ] ์๊ณ ๋ฆฌ์ฆ(algorithm) / ์ ํ ํ์ / ์ด์ง ํ์ / ์ ํ ์ ๋ ฌ / ์ฝ์ ์ ๋ ฌ / ์๊ณ ๋ฆฌ์ฆ์ ํ๊ฐ - ์๊ฐ ๋ณต์ก๋ & Big-O ์ ๊ทผํ๊ธฐ๋ฒ ๋ณธ๋ฌธ
[ํ์ด์ฌ] ์๊ณ ๋ฆฌ์ฆ(algorithm) / ์ ํ ํ์ / ์ด์ง ํ์ / ์ ํ ์ ๋ ฌ / ์ฝ์ ์ ๋ ฌ / ์๊ณ ๋ฆฌ์ฆ์ ํ๊ฐ - ์๊ฐ ๋ณต์ก๋ & Big-O ์ ๊ทผํ๊ธฐ๋ฒ
Shinjio 2023. 2. 23. 18:142023.02.22 ~ 2023.02.23 ์ฝ๋์ ํ์ต๋ด์ฉ
๐ ์๊ณ ๋ฆฌ์ฆ(algorithm)
์ํ๊ณผ ์ปดํจํฐ๊ณผํ, ์ธ์ดํ ๋๋ ์ฎ์ธ ๋ถ์ผ์์ ์ด๋ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ํด์ง ์ผ๋ จ์ ์ ์ฐจ
๊ณ์ฐ์ ์คํํ๊ธฐ ์ํ ๋จ๊ณ์ ์ ์ฐจ๋ฅผ ์๋ฏธํ๊ธฐ๋ ํจ
์ฆ, ๋ฌธ์ ํ์ด์ ํ์ํ ๊ณ์ฐ์ ์ฐจ ๋๋ ์ฒ๋ฆฌ ๊ณผ์ ์ ์์๋ฅผ ๋ปํจ
์๊ณ ๋ฆฌ์ฆ์ ์ฐ์ฐ, ๋ฐ์ดํฐ ๋ง์ด๋(๊ธฐ๊ณ ํ์ต) ๋๋ ์๋ํ๋ ์ถ๋ก ์ ์ํ
์ข์ ์๊ณ ๋ฆฌ์ฆ์ ์๋ ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํจ
1. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ
2. ๋ฌธ์ ๋ฅผ ๋ ์ ํด๊ฒฐํ๋ ๊ฒ
๐ ์ปดํจํฐ ์๊ณ ๋ฆฌ์ฆ
์ปดํจํฐ๊ฐ ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ ๋ฆฌ๋์ด ์๋ ์ผ๋ จ์ ๊ณผ์ ํน์ ๋ฐฉ๋ฒ
์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ ๋ ์๊ฐ๊ณผ ๊ณต๊ฐ ๋ณต์ก์ฑ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํจ
๐ ์๊ณ ๋ฆฌ์ฆ ์์ ๋ฃ๊ธฐ ์ ๋ณต์ต
โ ํฐ๋ฆฐ๋๋กฌ ๋ฌธ์ (for ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ)
(์์ ๋ฌธ์ ๋ Manacher's Algorithm๊ณผ ๊ด๋ จ์ด ์๋ค๊ณ ํ๋ค)
โผโผโผ ๋ชจ๋ฒ๋ต์ โผโผโผ
for ๋ฌธ์ ์ฌ์ฉํ์๊ณ ๋ณ์๋ฅผ ์ธ๋ฑ์ค๋ก ์ค์ ํด์ ๋ฌธ์ ๋ฅผ ํ์์
โผโผโผ ๋ด๊ฐ ํผ ๋ต์ โผโผโผ
โ ๋ฒ ๋ฐฉ๋ฒ : left, right ๋ณ์์ n๋ฒ๊น์ง์ ๋ฌธ์์ด ์ง์ (์ฌ๋ผ์ด์ฑ ํ์ฉ), n์ word์ ์ค๊ฐ ์ธ๋ฑ์ค
โก ๋ ๋ฒ์งธ๋ left, right ๋ณ์์ i๋ฒ ๋ฌธ์์ด ์ง์
๐ ๋ํ์ ์ธ ์ปดํจํฐ ์๊ณ ๋ฆฌ์ฆ
๐ ํ์ ์๊ณ ๋ฆฌ์ฆ(search algorithm)
โ ์ ํ ํ์ ์๊ณ ๋ฆฌ์ฆ(linear search algorithm)
๋ฆฌ์คํธ์์ ํน์ ํ ์์๋ฅผ ์ฐพ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ
์ํ๋ ์์๋ฅผ ์ฐพ์ ๋๊น์ง ๋ฆฌ์คํธ์ ๊ฐ๊ฐ์ ์์๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ํ๋์ฉ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
์ ํ ํ์ ์๊ณ ๋ฆฌ์ฆ steps
โ 0๋ฒ ์ธ๋ฑ์ค์์ ์์
โก ํ์ฌ์ ์ธ๋ฑ์ค์ ์ํ๋ ์์๋ฅผ ๋น๊ต
โข ๋ง์ฝ ์ํ๋ ์์๊ฐ ํ์ฌ์ ์ธ๋ฑ์ค์ ์์ผ๋ฉด ํ์ฌ์ ์ธ๋ฑ์ค๋ฅผ return
โฃ ๊ทธ๋ ์ง ์์ผ๋ฉด ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์ฆ๊ฐ์ํค๊ณ 2๋จ๊ณ๋ถํฐ ํ๋ก๋ ์ค๋ฅผ ๋ฐ๋ณต
โผโผโผ ์ ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฝ๋๋ก ์์ฑํด ๋ณด๊ธฐ โผโผโผ
โ ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ(binary search algorithm)
์ ๋ ฌ๋ ๋ฆฌ์คํธ์์ ํน์ ํ ์์๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ (์ ํ ํ์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฌ๋ฆฌ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ ์ ๋ก ํจ. ์ ๋ ฌ๋ ๋ฆฌ์คํธ๊ฐ ์๋๋ฉด ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉ ๋ถ๊ฐ๋ฅ). ์ค๊ฐ ๊ฐ์ ํตํด ํ์ํ ๋ฒ์๋ฅผ ๋ฐ์ฉ ์ ์ธ์์ผ ๊ฐ๋ฉฐ ๋ฒ์๋ฅผ ์ขํ ์ํ๋ ๊ฐ์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
โป ์ด์ง ํ์์ด๋ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์๋ ์ด์ : 1ํ ๋น๊ต๋ฅผ ๊ฑฐ์น ๋๋ง๋ค ํ์ ๋ฒ์๊ฐ ๋๋ต ์ ๋ฐ์ผ๋ก ์ค์ด๋ค๊ธฐ ๋๋ฌธ
์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ steps
โ ํ์ ๊ฐ๊ฒฉ์ ๊ฐ์ฅ ์ผ์ชฝ ํฌ์ธํธ(๋ฆฌ์คํธ์ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค)์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ํฌ์ธํธ(๋ฆฌ์คํธ์ ๋ง์ง๋ง ์ธ๋ฑ์ค)๋ก
'left'์ 'right' ๊ฐ ์ค์ . ์ฆ, left = 0, right = len(list) - 1
โก 'left'๊ฐ 'right'์ ๊ฐ๊ฑฐ๋ ๋ ์์ ๋ ์๋์ ๋จ๊ณ๋ฅผ ๋ฐ๋ณต
→ ํ์ ๊ฐ๊ฒฉ์ ์ค๊ฐ ์ธ๋ฑ์ค ๊ณ์ฐ mid = (left - right) // 2
→ ๋ง์ฝ ์ค๊ฐ ์ธ๋ฑ์ค์ ๊ฐ์ด ๋ชฉํ๋กํ๋ ๊ฐ๊ณผ ๊ฐ๋ค๋ฉด ์ค๊ฐ ์ธ๋ฑ์ค return
if list[mid] == elements:
return mid
→ ๋ง์ฝ ์ค๊ฐ ์ธ๋ฑ์ค์ ๊ฐ์ด ๋ชฉํ๋ก ํ๋ ๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด, right๋ ์ค๊ฐ ์ธ๋ฑ์ค๋ณด๋ค 1 ์์์ง
if list[mid] > elements:
right = mid - 1
๊ทธ๋ฆฌ๊ณ ๋์ ์ค๊ฐ ์ธ๋ฑ์ค์ ์ผ์ชฝ ์ ๋ฐ ๋ถ๋ถ๋ง ๋ค์ ํ์
→ ๋ง์ฝ ์ค๊ฐ ์ธ๋ฑ์ค์ ๊ฐ์ด ๋ชฉํ๋ก ํ๋ ๊ฐ๋ณด๋ค ์๋ค๋ฉด, left๋ ์ค๊ฐ ์ธ๋ฑ์ค๋ณด๋ค 1 ์ปค์ง
if list[mid] < elemnets:
left = mid + 1
๊ทธ๋ฆฌ๊ณ ๋์ ์ค๊ฐ ์ธ๋ฑ์ค์ ์ค๋ฅธ์ชฝ ์ ๋ฐ ๋ถ๋ถ๋ง ๋ค์ ํ์
→ ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ ์ํ๋ ๊ฐ์ ์ฐพ์ (๋ฐ๋ณต๋ฌธ)
โผโผโผ ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฝ๋๋ก ์์ฑํด ๋ณด๊ธฐ โผโผโผ
โผโผโผ ๋ด๊ฐ ์์ฑํ ํ๋ฆฐ ์ฝ๋ โผโผโผ
- ์ฒ์์๋ while๋ฌธ ์๋์์ ๋ณํ๋ ๋ณ์๋ฅผ mid_index ์์ฒด๋ก ๋๊ณ , if ๋ฌธ ์์ mid_index = len(some_list) // 2๋ฅผ ์คํํ๋๋ก ํ์์. ์ด๋ ๊ฒ ํ๊ฒ ๋๋ฉด mid_index ์์ฒด์ ๊ฐ์ด ๋ณํ๊ฒ ๋๋ฏ๋ก ์ฒ์์ ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ์ฐพ์ ์ ์๊ฒ ๋จ.
- ๊ทธ๋์ ๊ทธ ๋ค์์๋ i๋ฅผ ๋ณํ๋ ๋ณ์๋ก ๋๊ณ ์์ฑ. ์ด๋ ๊ฒ ์์ฑํ๊ฒ ๋๋ฉด ๋ฆฌ์คํธ ์์์ ๊ฐ์๊ฐ ๋์ด๋๊ฒ ๋๋ฉด ๋ฌดํ ๋ฐ๋ณต ๋ฐ์. ์๋ํ๋ฉด element๊ฐ some_list[i]๋ณด๋ค ์์์ i๋ฅผ 2๋ก ๋๋ด๋๋ฐ, ๊ทธ๋ค์ ์งํ ์ element๊ฐ some_list[i]๋ณด๋ค ํด ๊ฒฝ์ฐ i๋ ๋ค์ 2๋ฐฐ๊ฐ ๋์ด ์์ ๋ช ๋ น์ ๋ฐ๋ณตํ๊ฒ ๋๊ธฐ ๋๋ฌธ
โ ํ์ ์๊ณ ๋ฆฌ์ฆ ๋น๊ต
์ ํ ํ์์ ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง์๋ก ๊ฐ์ ์ฐพ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๊ธ๊ฒฉํ๊ฒ ๊ธธ์ด์ง์ง๋ง, ์ด์ง ํ์์ ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ ธ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์์ฃผ ์ฒ์ฒํ ๋์ด๋จ. ๋ฐ๋ผ์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ
๊ทธ๋ฌ๋ ์ด์ง ํ์์ด ๊ฐ๋ฅํ๊ธฐ ์ํด์๋ ๋ฆฌ์คํธ๊ฐ ์ ๋ ฌ์ด ๋์ด ์์ด์ผ ํจ. ์ ๋ ฌ์ด ์๋ ๋ฆฌ์คํธ์์๋ ์ ํ ํ์์ ์ฌ์ฉํด์ผ ํจ
โผโผโผ ๋ฆฌ์คํธ ๊ธธ์ด์ ๋ฐ๋ฅธ ํ์ ์๊ณ ๋ฆฌ์ฆ ์ฒ๋ฆฌ ํ์ ๋น๊ต โผโผโผ
๋ฆฌ์คํธ | ์ ํ ํ์ | ์ด์ง ํ์ |
16 | 16๊ฐ | 4๊ฐ |
32 | 32๊ฐ | 5๊ฐ |
64 | 64๊ฐ | 6๊ฐ |
128 | 128๊ฐ | 7๊ฐ |
๐ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (sorting algorithm)
ํน์ ์์๋ก ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ
๊ฐ์ฅ ํํ๊ฒ ์ฌ์ฉํ๋ ์ ๋ ฌ์ ์ค๋ฆ์ฐจ์ ํน์ ๋ด๋ฆผ์ฐจ์์ด๋ ์ํ๋ฒณ ์์ ํน์ ๋ฐ์ ๋น๋ ์์ ๊ฐ์ ํน์ ์กฐ๊ฑด์ ๊ธฐ์ด๋ก ์ ๋ ฌํ ์๋ ์์
ํ์ด์ฌ์ sorted ๋ด์ฅ ํจ์ ํน์ sort() ๋ฉ์๋ ์ฌ์ฉํด๋ ๋๋๋ฐ ์ ์ ๋ ฌ์ ๋ฐฐ์์ผ ํ๋๊ฐ?
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ด๋ฆฌ, ๋ฐ์ดํฐ ๋ถ์, ํ์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ด ๋ง์ ์ฉ๋๋ก ์ฌ์ฉ๋๋ฉฐ, ์ปดํจํฐ ๊ณผํ์ ํ์ ๋ด์ฉ
๋ค์ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ๋ฐ๋์๊ณ , ๊ฐ๊ฐ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์์ ์ฅ์ ๊ณผ ๋จ์ ์ ๊ฐ์ง๊ณ ์์. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ ํฌ๊ธฐ๋, ์ด์ฉ๊ฐ๋ฅํ ๋ฆฌ์์ค์ ๊ฐ์ ์์์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ์ฌ ์ฌ์ฉ
โ ์ ํ ์ ๋ ฌ(selection sort)
๊ฐ๋จํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ๋ ฌ๋์ง ์์ ๋ฆฌ์คํธ์์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ์ ์ ๋ ฌ๋์ง ์์ ๋ถ๋ถ์ ์์ ๋ถ๋ถ์ ์๋ ๊ฐ๊ณผ ๋ฐ๊ฟ์ผ๋ก์จ ์๋ํจ. ๊ทธ๋ค์์ผ๋ก ์์ ๊ฐ์ ์ฐพ์ ๋๋ง๋ค ์ ๋ ฌ๋์ง ์์ ๋ถ๋ถ์ ์์ ๋ถ๋ถ์ ์๋ ์ ์ ํ ์์น๋ก ์ฎ๊ฒจ ์ ์ฒด ๋ฆฌ์คํธ๊ฐ ์ ๋ ฌ๋ ๋๊น์ง ํ๋ก์ธ์ค๋ฅผ ๋ฐ๋ณตํจ
์ ํ ์ ๋ ฌ steps
โ ๋ฆฌ์คํธ์ 0๋ฒ ์ธ๋ฑ์ค๋ถํฐ ๋ ์ธ๋ฑ์ค๊น์ง ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ์ 0๋ฒ ์ธ๋ฑ์ค์ ๊ฐ๊ณผ ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ
→ 0๋ฒ ์ธ๋ฑ์ค๊น์ง ์ ๋ ฌ ์๋ฃ
โก 0๋ฒ ์ธ๋ฑ์ค๋ฅผ ์ ์ธํ๊ณ ๋๋จธ์ง ๋ฆฌ์คํธ์์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ์ 1๋ฒ ์ธ๋ฑ์ค์ ๊ฐ๊ณผ ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ
→ 1๋ฒ ์ธ๋ฑ์ค๊น์ง ์ ๋ ฌ ์๋ฃ
...
โข ์ ์ฒด ๋ฆฌ์คํธ๊ฐ ์ ๋ ฌ๋ ๋๊น์ง ๋ฐ๋ณต
์ ํ ์ ๋ ฌ์ ๋ฐ์ดํฐ์ ์์ด ๋ง์์ง์๋ก ๋นํจ์จ์ ์ด์ง๋ง ๊ฐ๋จํ๊ณ ์ฝ๋ค๋ ์ฅ์ ์ด ์์
โ ์ฝ์ ์ ๋ ฌ(insert sort)
๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌ๋ ๋ถ๋ถ๊ณผ ์ ๋ ฌ๋์ง ์์ ๋ถ๋ถ, ๋ ๋ถ๋ถ์ผ๋ก ๋๋์ด ์๋ํ๋ ์๊ณ ๋ฆฌ์ฆ
์ ๋ ฌ๋์ง ์์ ๋ถ๋ถ์์ ๊ฐ ๊ฐ๋ค์ ์ค์บํ๊ณ ์ ๋ ฌ๋ ๋ถ๋ถ์ ์ ๋นํ ์์น์ ๊ฐ์ ์ฝ์ ํจ. ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ์์๋ค์ ์ด์ฉํ์ฌ ๊ณต๊ฐ์ ํ๋ณด
์ฝ์ ์ ๋ ฌ steps
โ ๋ฆฌ์คํธ์ ์ฒซ๋ฒ์งธ ๊ฐ์ ํฌํจํด ์ ๋ ฌ๋ ๋ถ๋ถ์ผ๋ก ์ธํ
โก ์ฒซ ๋ฒ์งธ ๊ฐ์ ์ ์ธํ๊ณ ๋ฆฌ์คํธ์ ์ผ์ชฝ๋ถํฐ ์ค๋ฅธ์ชฝ๊น์ง ๊ฐ์ ์ค์บ
โข ์ ์ ์์น๋ฅผ ์ฐพ์ ๋๊น์ง ์ ๋ ฌ๋ ๋ถ๋ถ์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๊ฐ ๊ฐ๋ค์ ๋น๊ต
โฃ ์ ์ ์์น๋ฅผ ์ฐพ์ผ๋ฉด ๊ทธ ์์น์ ๊ฐ์ ์ฝ์ ํ๊ณ ๋๋จธ์ง ๊ฐ๋ค์ ์ด๋์ํด
โค ์ ์ฒด ๋ฆฌ์คํธ๊ฐ ์ ๋ ฌ๋ ๋๊น์ง ๋ฐ๋ณต
โผโผโผ ์ฝ์ ์ ๋ ฌ ๊ฐ๋ ์์ธ ์ค๋ช ๋งํฌ โผโผโผ
โผโผโผ ๋ค์ํ ์ํฉ์์์ ์ฌ๋ฌ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํผํฌ๋จผ์ค๋ฅผ ํ์ธํ ์ ์๋ ์ฌ์ดํธ โผโผโผ
์์ ์ฌ์ดํธ๋ฅผ ๋ณด๋ฉด ์ด๋ฏธ ๊ฑฐ์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ๋๋ ์ฝ์ ์ ๋ ฌ์ด ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐ๋ฉด, ๋ฌด์์ ์์์ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ๋๋ ํ ์ ๋ ฌ์ด ๊ฐ์ฅ ๋จผ์ ๋๋จ. ์์ ์ ๋ฐ๋๋ก ์ ๋ ฌ๋ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ์๋ ์ฝ์ ์ ๋ ฌ์ด ๋งค์ฐ ์ค๋ ๊ฑธ๋ฆผ. ์ ํ ์ ๋ ฌ๊ณผ ํฉ๋ณ ์ ๋ ฌ์ ์ํฉ์ ์ํฅ์ ๋ฐ์ง ์๊ณ ์ผ์ ํ ์๊ฐ์ด ์์๋จ
์ด๋ ๊ฒ ์ ๋ ฌ ๋ฌธ์ ์ ๊ฒฝ์ฐ "์ ๋์ ์ธ ์ข์ ๋ต"์ด๋ ์์. ์ํฉ์ ๋ฐ๋ฅธ ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฅ๋จ์ ์ ํ์ ํด์ผ ์ฌ๋ฐ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ ์ ์์. ๋ฐ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ ํ๊ฐํ๋ ๋ฅ๋ ฅ์ ๊ธธ๋ฌ์ผ ํจ
๐ ์๊ณ ๋ฆฌ์ฆ ํ๊ฐ๋ฒ
์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ ๋ ์ ๊ฒฝ ์จ์ผ ํ ๊ฒ 2๊ฐ์ง๋ ์๊ฐ๊ณผ ์ ์ฅ ๊ณต๊ฐ์. ์ข์ ์ฝ๋์ ์ฒซ ๋ฒ์งธ ๊ธฐ์ค์ ๋ฐ๋ก ๋นจ๋ฆฌ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ ๊ฒ(์๊ฐ)์ด๋ฉฐ ๋ ๋ฒ์งธ ๊ธฐ์ค์ ์ ์ฅ ๊ณต๊ฐ์ ๋๋๋ก ์ ๊ฒ ์ฐจ์งํ๋ ๊ฒ์. ๊ทธ๋ฌ๋ ๋ ์ค์ํ ๊ฒ์ ์๊ฐ ์์(์ฉ๋์ ๋ ์ฃผ๊ณ ๋๋ฆด ์ ์์) ⇒ ์๊ฐ ๋ณต์ก๋, ๊ณต๊ฐ ๋ณต์ก๋
์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ์ ์ปดํจํฐ๊ฐ ์๊ณ ๋ฆฌ์ฆ ์ฝ๋๋ฅผ ์คํํ๋ ์๋์ ์์กดํจ. ์ด ์๋๋ ์ปดํจํฐ์ ์ฒ๋ฆฌ์๋, ์ฌ์ฉ๋ ์ธ์ด์ ์ข ๋ฅ, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ปดํจํฐ๊ฐ ์คํํ ์ ์๋ ์ฝ๋๋ก ๋ฐ๊พธ๋ ์ปดํ์ผ๋ฌ์ ์๋ ๋ฑ์ ๋ฌ๋ ค์์. ์ฆ, ์์ ํ๋๋ก ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์์์๊ฐ์ ์๋ฒฝํ๊ฒ ํํํ๊ธฐ ์ด๋ ค์. ์ปดํจํฐ์ ์ฌ์ ๋ฑ ์ฌ๋ฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ. ๊ทธ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ์ ํ์ ํ ์ ์๋ ๋ ๋ค๋ฅธ ์์๋ก ์ ๋ ฅ๊ฐ์ ํฌ๊ธฐ(์ธํ ์ฌ์ด์ฆ)๋ ์์. ์ฐ๋ฆฌ๋ ์ด ์ ๋ ฅ๊ฐ์ ํฌ๊ธฐ(์ธํ ์ฌ์ด์ฆ)์ ๋ฐ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ํ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์์ ⇒ Big-O ์ ๊ทผํ๊ธฐ๋ฒ
- ์ธํ ํฌ๊ธฐ ⇒ ๋ฆฌ์คํธ์ ๊ธธ์ด n
๐ ์๊ฐ ๋ณต์ก๋(Time Complexity)
์ธํ ํฌ๊ธฐ์ ํจ์์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ํํ๋๋ฐ ํ์๋ก ํ๋ ์ปดํจํฐ ๋ฆฌ์์ค(์๊ฐ)๋ฅผ ์ธก์
๋ฐ์ดํฐ๊ฐ ๋ง์์ง์๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ฒ๋ฆฌํ๋ ์๊ฐ์ด ์ผ๋ง๋ ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋๊ฐ
์ธํ ํฌ๊ธฐ์ ๋น๋กํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ
์๊ฐ ๋ณต์ก๋๊ฐ ํด์๋ก, ์ธํ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ์๊ณ ๋ฆฌ์ฆ์ ์คํํ๋๋ฐ ์ค๋ ๊ฑธ๋ฆผ
์๊ฐ ๋ณต์ก๋๋ฅผ ๋ถ์ํ๊ธฐ ์ํด์๋ ์ฝ๊ฐ์ ์ํ์ด ํ์
โ ๊ฑฐ๋ญ์ ๊ณฑ(exponentiation)
โก๋ก๊ทธ(logarithms)
๋ก๊ทธ๋ ๊ฑฐ๋ญ์ ๊ณฑ์ ๋ฐ๋ ๊ฐ๋ ์ผ๋ก
b๋ฅผ a๋ก ๋ช ๋ฒ ๋๋์ด์ผ 1์ด ๋๋๊ฐ
a๊ฐ 2์ผ ๊ฒฝ์ฐ lg๋ผ๊ณ ์ฐ๊ธฐ๋ ํจ
โข 1๋ถํฐ n๊น์ง์ ํฉ
T = 1 + 2+ 3 + ... + (n-2) + (n-1) + n
T = n + (n-1) + (n-2) + ... + 3 + 2 + 1
2T = (1+n) * n
T = (1 + n) * n / 2
๐ Big-O ์ ๊ทผํ๊ธฐ๋ฒ
Big-O ์ ๊ทผํ๊ธฐ๋ฒ์
์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๊ธฐ๋ฒ(๊ณต๊ฐ๋ณต์ก๋์์๋ ์ฌ์ฉ๋ ์ ์์)
Big-O ์ ๊ทผํ๊ธฐ๋ฒ์ ํต์ฌ์ n์ด ์์ฒญ ํฌ๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒ. n์ด ๋ณ๋ก ํฌ์ง ์๋ค๋ฉด ์ ์ข์ ์๊ณ ๋ฆฌ์ฆ์ ์จ๋ ํฌ๊ฒ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ. ์ ๋์ ์ธ ์๊ฐ์ด ์๋๋ผ ์ฑ์ฅ์ฑ์ ๋ณด๊ณ ์ถ๊ธฐ ๋๋ฌธ์ n์ ์ํฅ์ ๊ฐ์ฅ ๋ง์ด ๋ฐ๋ ๊ฒ๋ง ์ฌ์ฉ. ๋ฐ๋ผ์ ์ ๊ทผ ํ๊ธฐ๋ฒ์ ์์์์ n์ ์ํฅ๋ ฅ์ด ๊ฐ์ฅ ํฐ ๊ฒ๋ง ํ๊ธฐ
Big-O ์ ๊ทผํ๊ธฐ๋ฒ ๊ท์น : ์์์์ n์ ์ํฅ๋ ฅ์ด ๊ฐ์ฅ ํฐ ๊ฒ๋ง ํ๊ธฐํ๋ค
n์ด ๋ฌดํํ๊ฒ ์ปค์ง์๋ก ๋๋จธ์ง ์์์ ํฌ๊ฒ ์ํฅ์ ๋ฏธ์น์ง ์๊ธฐ ๋๋ฌธ
์์ ์๊ฐ Big-O ์ ๊ทผํ๊ธฐ๋ฒ 20n + 40 O(n) 2n^2 + 8n O(n^2) 5n^3 + 100n^2 +75 O(n^3) 20lgn + 50 O(lgn)
Big-O ์ ๊ทผ ํ๊ธฐ๋ฒ์ ์๋ฏธ
O(1) : ์ธํ ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ ์ฆ๊ฐํด๋ ์์ ์๊ฐ์ ๋๊ฐ์
O(n) : ์ธํ ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ x๋ฐฐ ์ฆ๊ฐํ๋ฉด x๋ฐฐ๋งํผ ์์ ์๊ฐ์ด ์ฆ๊ฐ
O(n^2) : ์ธํ ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ x๋ฐฐ ์ฆ๊ฐํ๋ฉด x^2๋ฐฐ๋งํผ ์์ ์๊ฐ์ด ์ฆ๊ฐ
O(n^3) : ์ธํ ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ x๋ฐฐ ์ฆ๊ฐํ๋ฉด x^3๋ฐฐ๋งํผ ์์ ์๊ฐ์ด ์ฆ๊ฐ
โ ํ์ ์๊ณ ๋ฆฌ์ฆ ํ๊ฐํ๊ธฐ
์ ํ ํ์ ์๊ณ ๋ฆฌ์ฆ ํ๊ฐํ๊ธฐ
๋ฆฌ์คํธ์ ๊ฐ์ : N๊ฐ
โ ๋ง์ฝ, ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด 0๋ฒ ์ธ๋ฑ์ค์ ์์ ๊ฒฝ์ฐ
→ ์ธ๋ฑ์ค 0๋ฒ์ธ 1๊ฐ๋ง ํ์ธํ๋ฉด ๋จ
→ ์๊ฐ ๋ณต์ก๋๋ O(1)
โก ๋ง์ฝ, ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ๋ฆฌ์คํธ์ ์์ ๊ฒฝ์ฐ
→ ์ต๋ N๋ฒ ํ์ธํด์ผ ํจ
→ ์๊ฐ ๋ณต์ก๋๋ O(N)
์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ ํ๊ฐํ๊ธฐ
๋ฆฌ์คํธ์ ๊ฐ์ : N๊ฐ
โ ๋ง์ฝ, ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ ์ธ๋ฑ์ค์ ์์ ๊ฒฝ์ฐ
- start_index → O(1)
- last_index → O(1)
- while๋ฌธ → O(1) : ์ค๊ฐ ์ธ๋ฑ์ค๋ง ํ์ธํ๋ฉด ๋๊ธฐ ๋๋ฌธ
- return None → O(1)
⇒ ์ด ์๊ฐ ๋ณต์ก๋๋ O(4)์ด์ง๋ง ์ ๊ทผํ๊ธฐ๋ฒ ๊ท์น์ ์ํด O(1)์ด ๋จ
โก ๋ง์ฝ, ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ๋ฆฌ์คํธ์ ์์ ๊ฒฝ์ฐ
- start_index → O(1)
- last_index → O(1)
- while๋ฌธ → O(lg n) : ์ค๊ฐ ์ธ๋ฑ์ค๋ง ํ์ธํ๋ฉด ๋๊ธฐ ๋๋ฌธ
while ๋ฌธ ์ฒซ ์ํ ํ N์ ๊ฐ์ → N/2
๋ ๋ฒ์งธ ์ํ ํ N์ ๊ฐ์ → 1/2 * N/2
์ธ ๋ฒ์งธ ์ํ ํ N์ ๊ฐ์ → 1/2 * 1/2 * N/2
...
K ๋ฒ์งธ ์ํ ํ N์ ๊ฐ์ → (1/2)^K * N
...
์ฐพ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ๋จ๋ ๋ฐ์ดํฐ์ ๊ฐ์๋ ์ต์ข ์ ์ผ๋ก 1์ด ๋จ
๋ฐ๋ผ์ (1/2)^K * N๋ 1์ ์๋ ดํ๊ฒ ๋จ
- return None → O(1)
⇒ ์ด ์๊ฐ ๋ณต์ก๋๋ O(lg n + 3)์ด์ง๋ง ์ ๊ทผํ๊ธฐ๋ฒ ๊ท์น์ ์ํด O(lg n)์ด ๋จ
โ ์ ๊ทผ ํ๊ธฐ๋ฒ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ํ๊ฐํ ๋ ์ฃผ์ํด์ผ ํ ์
์ฝ๋๊ฐ ๋ชจ๋ ์ค์ O(1) ์ธ๊ฐ์?
NO. ์ธํ ํฌ๊ธฐ์ ์๊ด์์ด ์คํ๋๋ ์ฝ๋๋ง O(1)
๊ทธ๋ ์ง ์์ ์ฝ๋๋ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ฐ์ ธ๋ด์ผ ํจ
๋ง์ฝ ๋ฆฌ์คํธ์์ in ํค์๋๋ฅผ ํตํด ๊ฐ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ฉด ๋ด๋ถ์ ์ผ๋ก O(n)์ ์ ํ ํ์์ด ์ด๋ฃจ์ด์ง
โผ ๋ค์ํ ํจ์, ๋ฉ์๋ ๋ฑ์์์ ์๊ฐ๋ณต์ก๋ ํ๊ฐ
Operation | Code | Average Case |
์ธ๋ฑ์ฑ | my_list[index] | O(1) |
์ ๋ ฌ | my_list.sort() sorted(my_list) |
O(nlg n) |
๋ค์ง๊ธฐ | my_list.reverse() | O(n) |
ํ์ | element in my_list | O(n) |
๋์ ์์ ์ถ๊ฐ | my_list.append(element) | O(1) |
์ค๊ฐ์ ์์ ์ถ๊ฐ | my_list.insert(index, element) | O(n) |
์ญ์ | del my_list[index] | O(n) |
์ต์๊ฐ, ์ต๋๊ฐ ์ฐพ๊ธฐ | min(my_list) max(my_list) |
O(n) |
๊ธธ์ด ๊ตฌํ๊ธฐ | len(my_list) | O(1) |
์ฌ๋ผ์ด์ฑ | my_list[a:b] | O(b-a) |
ํ์ ํจ์ | type(my_list) | O(1) |
๋ฌธ์์ด๋ก ๋ณํ | str(N) (N์ d์๋ฆฟ์) | O(log n) ํน์ O(d) |
โป sort ๋ฉ์๋๋ ํจ์ sorted๋ ์ ๋ ฅ์ ํฌ๊ธฐ๊ฐ ์ปค์ง ๊ฒฝ์ฐ ํจ์จ์ ์ผ๋ก ์ ๋ ฌํ๊ธฐ ์ํด ํต ์ ๋ ฌ๊ณผ ๊ฐ์ ์งํ๋ ์ ๋ ฌ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ O(n lg n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์ ์์
โผ ๋์ ๋๋ฆฌ์์์ ์๊ฐ๋ณต์ก๋ ํ๊ฐ
Operation | Code | Average Case |
๊ฐ ์ฐพ๊ธฐ | my_dict[key] | O(1) |
๊ฐ ๋ฃ์ด์ฃผ๊ธฐ/๋ฎ์ด์ฐ๊ธฐ | my_dict[key] = value | O(1) |
๊ฐ ์ญ์ | del my_dict[key] | O(1) |
โ ์ฃผ์ ์๊ฐ ๋ณต์ก๋ ์ด ์ ๋ฆฌ
O(1) * : ์ธํ์ ํฌ๊ธฐ๊ฐ ์์ ์๊ฐ์ ์ํฅ์ด ์๋ค๋ ๋ป
O(lg n) * : ๋ฐ๋ณต๋ฌธ์ด์ง๋ง n์ด 2๋ฐฐ์ฉ ์ฆ๊ฐํ ๋ ํน์ 1/2๋ฐฐ์ฉ ๊ฐ์ํ ๋ (์. ์ด์ง ํ์)
O(n) * : ๋ฐ๋ณต๋ฌธ์ด ์๊ณ , ๋ฐ๋ณต๋๋ ํ์๊ฐ ์ธํ์ ํฌ๊ธฐ์ ๋น๋กํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก O(n) (์. ์ ํ ํ์)
O(n lg n) * : O(n)๊ณผ O(lg n)์ด ๊ฒน์ณ์ก์ ๋
O(n^2) * : 2๋ฒ ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ
O(n^3) * : 3ํ ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ
O(n^4) : 4ํ ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ
๐ ๊ณต๊ฐ ๋ณต์ก๋
์ธํ ํฌ๊ธฐ์ ๋น๋กํด์ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
๊ณต๊ฐ ๋ณต์ก๋ ๋ํ ์ ๊ทผ ํ๊ธฐ๋ฒ (Big-O)๋ฅผ ์ฌ์ฉํ ์ ์์
โ O(1)
ํ๋ผ๋ฏธํฐ a, b, c๊ฐ ์ฐจ์งํ๋ ๊ณต๊ฐ์ ์ ์ธํ๋ฉด ์ถ๊ฐ์ ์ผ๋ก ๋ณ์ result๊ฐ ๊ณต๊ฐ์ ์ฐจ์ง
๋ฆฌํด๋๋ result๊ฐ ์ฐจ์งํ๋ ๊ณต๊ฐ์ ์ธํ๊ณผ๋ ๋ฌด๊ดํ๋ฏ๋ก ํจ์ product์ ๊ณต๊ฐ ๋ณต์ก๋๋ O(1)
โ O(n)
์ธํ my_list์ ๊ธธ์ด๋ฅผ n์ผ๋ก ๊ฐ์ . ํ๋ผ๋ฏธํฐ my_list๊ฐ ์ฐจ์งํ๋ ๊ณต๊ฐ์ ์ ์ธํ๋ฉด ์ถ๊ฐ์ ์ผ๋ก ๋ณ์ every_other๊ฐ ๊ณต๊ฐ์ ์ฐจ์ง. every_other์๋ my_list์ ์ง์ ์ธ๋ฑ์ค์ ๊ฐ๋ค์ด ๋ณต์ฌ๋์ด ๋ค์ด๊ฐ. ์ฝ n/2๊ฐ์ ๊ฐ์ด ๋ค์ด๊ฐ๋ค๋ ๋ป. O(n/2)๋ ๊ท์น์ ์ํด O(n)์ผ๋ก ๋ํ๋ด๋ฏ๋ก get_every_other ํจ์์ ๊ณต๊ฐ ๋ณต์ก๋๋ O(n)
โ O(n^2)
์ธํ my_list์ ๊ธธ์ด๋ฅผ n์ผ๋ก ๊ฐ์ . ํ๋ผ๋ฏธํฐ my_list๊ฐ ์ฐจ์งํ๋ ๊ณต๊ฐ์ ์ ์ธํ๋ฉด ์ถ๊ฐ์ ์ผ๋ก ๋ณ์ products, a, b๊ฐ ๊ณต๊ฐ์ ์ฐจ์ง. a์ b๋ ์ ์ ๊ฐ์ ๋ด์ผ๋ฏ๋ก O(1). products๋ my_list์์ ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ ๊ณฑ์ด ๋ค์ด๊ฐ. ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ n^2๊ฐ๋ก O(n^2) โป ๊ณต๊ฐ ๋ณต์ก๋๋ ์ฝ๋๊ฐ ์ํ๋๋ ๋์ ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ. ์ฆ, a * b์ ๊ฒฐ๊ณผ๊ฐ 6๊ฐ๊ฐ ๋์จ๋ค๊ณ ํด์ n^2๋ฒ์ ์ํํ์ผ๋ฏ๋ก ๊ณต๊ฐ ๋ณต์ก๋๋ O(n^2)