์๊ฐ ๋ณต์ก๋๋ ํ์ฌ ์ ๋ ฅ๋ ํฌ๊ธฐ n์ ๋ํ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ์ด๋ค. ์ด๋ฅผํ ๋ฉด ๊ธธ ์ฐพ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ์คํํ๋ค๊ณ ํ ๋, ๊ฐ์ฅ ๋น ๋ฅธ ๊ธธ์ ์ต์ ์ผ์ด์ค๊ฐ ๋ ๊ฒ์ด๋ค. ์ ๋นํ ๋์๊ฐ๋ค๋ฉด ํ๊ท ์ผ์ด์ค, ๊ทธ๋ฆฌ๊ณ ์ ๋ง ์ต์ ์ ์ผ์ด์ค ์ญ์ ์กด์ฌํ ๊ฒ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก Big-O๋ ์ต์ ์ ์ผ์ด์ค๋ฅผ ๋ถ์ํ๋ค. ํด๋น ์ต์ ์ ์ผ์ด์ค๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ผ๋ก ๋ค์ด๊ฐ ๊ฒ์ด๋ค.
๊ณต๊ฐ ๋ณต์ก๋๋ ํ์ฌ ์ ๋ ฅ๋ ํฌ๊ธฐ n์ ๋ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด๋ค. ๊ณต๊ฐ ๋ณต์ก๋๋ ์ ๋ ฅ ๊ณต๊ฐ, ๋ณด์กฐ ๊ณต๊ฐ, ์ถ๋ ฅ ๊ณต๊ฐ์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค. ์ด ์ค ์ฐ๋ฆฌ๋ ์ฃผ๋ก ๋ณด์กฐ ๊ณต๊ฐ์ ๋ถ์ํ๊ฒ ๋ ๊ฒ์ด๋ค. ๋ณด์กฐ ๊ณต๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด ์คํ๋๋ ๋์ ์์๋ก ์ฌ์ฉ๋๋ ๊ณต๊ฐ์ด๋ผ ์ดํดํ๋ฉด ๋๋ค. ์ด ๊ณต๊ฐ์ ์ ๋ ฅ ๊ณต๊ฐ์ ํฌํจํ์ง ์๊ธฐ์, ์์ํ๊ฒ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ผ๋ง๋ ์ฌ์ฉ๋๊ณ ์๋์ง๋ฅผ ํ์ ํ๊ธฐ์ ์ ์ฉํด ์ด๊ฑธ๋ก ์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ์ ํ๋จํ ์ ์๋ค. ๊ณต๊ฐ ๋ณต์ก๋ ์ญ์ Big-O ํ๊ธฐ๋ฒ์ ์ด์ฉํด ๋ณต์ก๋๋ฅผ ํ๊ธฐํ ์ ์๋ค.

๋ฐฑ์ค ๋ฌธ์ ๋ค์ ๋ณด๋ค๋ณด๋ฉด ์๊ฐ ์ ํ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ๋์ค๋๋ฐ, ์ด๊ฒ ๊ฐ๊ฐ ์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋์ ๊ด๋ จ๋ ๊ฒ์ด๋ผ ์๊ฐํ๋ฉด ๋๋ค.
์๋ ํ๋ Big-O ํ๊ธฐ๋ฒ์ ์ ๋ฆฌํ ๊ฒ์ด๋ค

์์๋ฅผ ํตํด ํ๊ธฐ๋ฒ์ ํ์ธํด๋ณด์. ํ์ด์ฌ ์ฝ๋์ด๋ค
def func(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i
return -1
์ฐ์ ๋ฌด์์ด n์ธ๊ฐ? ์ฌ๊ธฐ์์๋ len(arr)์ด n์ด ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ต์ ์ ๊ฒฝ์ฐ target์ ์ฐพ๊ธฐ ์ํด ์ต๋ n๋ฒ์ ๋ฐ๋ณต๋ฌธ์ด ํ์ํ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ์ ์๊ฐ ๋ณต์ก๋๋ O(n)์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฑํ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก์๋จน์ง ์๊ณ ์๋ ์ ๋ณด๋ง ์ฌ์ฉํด์ ํ์ํ๊ธฐ์ ๊ณต๊ฐ ๋ณต์ก๋๋ O(1)์ด๋ค.
def func(arr, target, left, right):
if left > right:
return -1
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
return func(arr, target, mid + 1, right)
else:
return func(arr, target, left, mid - 1)
์ด๋ฒ์๋ ์ฌ๊ท๋ฅผ ํฌํจํ ์ด์ง ํ์ ํจ์์ด๋ค. ๋งค๋ฒ ์ฌ๊ท๋ฅผ ๋ฐ๋ณตํ ๋๋ง๋ค ํ์ ๋ฒ์๊ฐ ์ ๋ฐ์ผ๋ก ์ค์ด๋ค๊ณ ์๋ค. ๊ทธ๋ ๊ธฐ์ ์๊ฐ ๋ณต์ก๋๋ O(log n)์ด๋ค. ๊ณต๊ฐ ๋ณต์ก๋๋ ์ด๋จ๊น? ์ฌ์ฉํ๊ณ ์๋ ๋ณ์๋ ๊ณ์ ๋์ผํ์ง๋ง, ์ฌ๊ท๋ก ํจ์๋ฅผ ๋ค์ ํธ์ถํ ๋๋ง๋ค ์ฌ๊ท ํธ์ถ ์คํ์ log n๊ฐ์ ํจ์ ํ๋ ์์ด ์ ์ฅ๋๊ณ ์๋ค. ๊ทธ๋ ๊ธฐ์ ๊ณต๊ฐ ๋ณต์ก๋ ์ญ์ O(log n)์ด๋ค.
'๊ณต๋ถ > ์ฝ๋ฉ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์๊ณ ๋ฆฌ์ฆ ์คํฐ๋] 1์ฃผ์ฐจ ๊ฒฐ์ฐ (0) | 2025.09.27 |
|---|---|
| [C++] ๋ฒกํฐ๋ฅผ ์ง์ ์ ์ํด๋ณด์! (0) | 2025.08.20 |
| [C++] vector์ pair ์ฐ์ต (2) | 2025.08.17 |
| [C++] ๊ทธ์น๋ง ์ด๋ ๊ฒ๋ผ๋ ํ์ง ์์ผ๋ฉด iostream์ด ์๋ ๋์๊ฒ ๊ด์ฌ๋ ์ฃผ์ง ์๋๊ฑธ(๋ถ๋ฆฌ ์ปดํ์ผ) (4) | 2025.08.11 |
| [C++] new์ malloc์ ํ๋๋ธ๋ ๋๊ฐ ๋จน๊ณ ์ถ์๋ ์ฌ์์น๊ตฌ์ ๊ฐ๋ค (3) | 2025.08.03 |