๐ค ํ์ตํ ๋ด์ฉ
์ด๋ฒ ์๊ฐ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ก ์ ๋ถ์๊ณผ ์คํ์ ๋ถ์๊ฐ์ ์ฐจ์ด์ ์ ๋ํด ์ดํด๋ณธ ํ์, Big-Oh notation์ ๋ํด ์ง์ค์ ์ผ๋ก ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ ๋ฒ ํ๊ธฐ ๋์ Computer Structure์์ Big-Oh notation์ ๋ค๋ค๋๋ฐ ์กฐ๊ธ ๋ ์์ธํ๊ฒ ๋ฐฐ์๋ณด๊ฒ ์ต๋๋ค.
๐ Algorithm
์๊ณ ๋ฆฌ์ฆ์ด๋ ์ด๋ค ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํ ์ ํํ ์ ์ฐจ์ ๋ฐฉ๋ฒ์ ๋งํฉ๋๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๋ ๋ณดํต '์ํ์ ์ผ๋ก ์๋ฐํ' ์ ์๋ ๋ฌธ์ ์ ํ์ ๋ฉ๋๋ค.
์กฐ๊ธ ๋ ์ข์ ์๋ฏธ๋ก๋ ์ ๋ ฅ๊ฐ์ด ์ฃผ์ด์ก์ ๋, ์ํ์ ์ผ๋ก ์๋ฐํ ์ ์๋ ์ ์๋ ๋ต(์ถ๋ ฅ๊ฐ)์ ๋์ถํ๋ ์ ์ฐจ์ ๋ฐฉ๋ฒ์ ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์๋ ์คํ์ ๋ถ์๊ณผ ์ด๋ก ์ ๋ถ์์ด ์์ต๋๋ค.
์คํ์ ๋ถ์(Experimental analysis)
์ฃผ์ด์ง ์๊ณ ๋ฆฌ์ฆ์ ์์ค์ฝ๋๋ก ๊ตฌํํ ๋ค์ ์ค์ ํ๊ฒฝ์์ ๋์๊น์ผ ์ค์ ์คํ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
ex) C์ธ์ด์์๋ clock()์ด๋ผ๋ ํจ์๋ฅผ ์ด์ฉํด์ ์๊ณ ๋ฆฌ์ฆ์ ๋์์๊ฐ์ ์ธก์ ๊ฐ๋ฅํฉ๋๋ค.
์คํ์ ๋ถ์์ ๋ฌธ์ ์ ์ ์๊ณ ๋ฆฌ์ฆ์ ์ค์ ๊ตฌํํ๊ธฐ๊น์ง ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ์๋ชจ๋๋ค๋ ๊ฒ์ ๋๋ค.
๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ๋น๊ตํ ๋, ๋ค์ํ ์ธ๋ถ ์์ธ๋ค(ํ๋์จ์ด ์ฌ์, ์ฝ๋ฉ ์คํ์ผ, ํ์ฌ ์ปดํจํฐ ์ธ๋ถ ํ๊ฒฝ ์ํ ๋ฑ)๋ก ์ธํด ์ ํํ ๋น๊ต๊ฐ ์ด๋ ต์ต๋๋ค.
์ด๋ก ์ ๋ถ์(Theoretical analysis)
์๊ณ ๋ฆฌ์ฆ ์ํ ์๊ฐ(=์ฑ๋ฅ)์ ์ค์ ๊ตฌํ์ ํตํด์๊ฐ ์๋, ์ด๋ก ์ ์ผ๋ก ๊ธฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์๊ฐ์ ๋ณดํต ์ ๋ ฅ ์ฌ์ด์ฆ(๋ณดํตn์ผ๋ก ํ๊ธฐ)์ ๊ดํ ํจ์๋ก ํํ๋ฉ๋๋ค.
ํจ์์ ๊ฒฐ๊ณผ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ํํ๋๋ฐ ํ์ํ ๊ธฐ๋ณธ ์ฐ์ฐ์ ์ด ํ์๋ฅผ ํํํฉ๋๋ค.
์ฌ์ฉํ๋ ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด์ ๋ฌด๊ดํ๊ฒ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ํํ ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ก ์ ๋ถ์์ ํตํด ๊ตฌํ ์๊ณ ๋ฆฌ์ฆ ์ํ ์๊ฐ์ ์๊ฐ ๋ณต์ก๋(time complexity)๋ผ๊ณ ํฉ๋๋ค.
์ด๋ก ์ ๋ถ์์์ ๊ณ ๋ คํ๋ ๊ธฐ๋ณธ ์ฐ์ฐ๋ค์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
์ซ์๋ฅผ ๋ณ์์ ๋์ ํ๋ ๊ฒฝ์ฐ
ํจ์๋ฅผ ํธ์ถ, ํจ์์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ ๊ฒฝ์ฐ
๋(์์) ์ ์ ์ฌ์ด์ ์ฌ์น์ฐ์ฐ
Array์ Get, Set์ฐ์ฐ
๊ธฐํ ์ปดํจํฐ ํ๋์จ์ด์ ์ ์๋ ๋จ์ผ ๋ช ๋ น์ด
etc..(์์ฆ์ ์ปดํจํฐ์ ์ฑ๋ฅ์ด ๋งค์ฐ ์ข์์ ธ์ ๋ค์ํ๋ค๊ณ ํ์ง๋ง ์์ ๊ฒฝ์ฐ๋ง ๊ณ ๋ คํ๋๋ก ํ๊ฒ ์ต๋๋ค.)
ํ ๋ฒ์ ๊ธฐ๋ณธ ์ฐ์ฐ์ ์ํํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธ๋ถ ์์ธ์ ๋ฐ๋ผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ ํํ ์๊ฐ์ ์ ์ ์์ต๋๋ค.
ํ์ง๋ง ๊ฐ๊ฐ์ ๋จ์ผ ์ฐ์ฐ๋ค์ ์ ๋ ฅ ํฌ๊ธฐ์๋ ๋ฌด๊ดํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ ์ด๋ก ์ ์ผ๋ก ์ฐ์ฐ๋ค์ ์์ ์๊ฐ(constant time)์ด ์๋ชจ๋ฉ๋๋ค.
๐ Big-Oh Notation
Big-Oh notation (Big-Oh ํ๊ธฐ๋ฒ)์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
์ด๋ก ์ ๋ถ์์์๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํํํ ํจ์ ์์ฒด๋ณด๋ค ์ ๋ ฅ ์ฌ์ด์ฆ์ ๋น๋กํด์ ํด๋น ํจ์๊ฐ ์ด๋ ์ ๋๋ก ์ฆ๊ฐํ๋๊ฐ์ ๋ ๊ด์ฌ์ด ๋ง์ต๋๋ค.
์์ constant time ์ฐ์ฐ๋ค์ ์ ๋ ฅ ์ฌ์ด์ฆ์ ๋ฌด๊ดํ ๋ฟ๋๋ฌ ํจ์๊ฐ ์ฆ๊ฐํ๋ ์๋์๋ ๊ฑฐ์ ๋ฌด๊ดํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ปดํจํฐ 1๋ณด๋ค ๋ชจ๋ ๊ธฐ๋ณธ ์ฐ์ฐ๋ค์ด 10๋ฐฐ ๋น ๋ฅธ ์ปดํจํฐ 2๊ฐ ์๋ค๊ณ ํ์ ๋ ์ค์ ์ฑ๋ฅ์์๋ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ผ์๋ก ๊ธฐ๋ณธ ์ฐ์ฐ๋ค์ ์๋์ฐจ์ด๋ ๊ฑฐ์ ๋ฌด์๋ฏธํด์ง๋๋ค.
์๊ฐ๋ณต์ก๋๊ฐ n์ด๋ผ๋ฉด n์๊ฐ๋์ ์ปดํจํฐ 1์ด K๊ฐ์ ์๋ฃ๋ฅผ ์ฒ๋ฆฌํ ๋, ์ปดํจํฐ 2๋ 10K๊ฐ์ ์๋ฃ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์๊ฐ๋ณต์ก๋๊ฐ n³์ด๋ผ๋ฉด ์ปดํจํฐ 1์ด K๊ฐ์ ์๋ฃ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ปดํจํฐ 2๋ 2.~K๊ฐ์ ์๋ฃ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
๊ธฐ๋ณธ ์ฐ์ฐ๋ค์ด 10๋ฐฐ ๋น ๋ฅด๋ค๊ณ ํด๋ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์์๋ ์๋์ฐจ์ด๊ฐ ๋ฌด์ํด์ง์ ๋ํ๋ ๋๋ค.
Big-Oh Notation์ ์ ์
Big-Oh Notation์ ์ ์๋ ์๋์ ๊ฐ์ต๋๋ค.
์ํ์ ๊ธฐํธ๋ฅผ ํ์ฉํ์ฌ ์๋์ ๊ฐ์ด ํํํ ์ ์์ต๋๋ค.
์ฆ ์กฐ๊ฑด์ ๋ง์กฑํ๋ $c$์ $n_0$์ ์ฐพ์ผ๋ฉด Big-Oh Notation์ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ๋ํ๋ผ ์ ์์ต๋๋ค.
์์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋จผ์ ์์ํจ์ $f(n) = 30$๋ฅผ Big-Oh Notation์ผ๋ก ํ๊ธฐํด๋ณด๊ฒ ์ต๋๋ค.
์์ํจ์๋ $n$๊ณผ ๊ด๊ณ์์ด ํญ์ ์ผ์ ํ ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก 30๋ณด๋ค ํฐ $c$๊ฐ ์กด์ฌํ๋ค๋ฉด ์ด๋ฅผ ๋ง์กฑํฉ๋๋ค.
Big-Oh Notation์์๋ ์ด๋ฅผ $f(n) = O(g(n))$๋ก ๋ํ๋ ๋๋ค.
1์ฐจํจ์์ธ $f(n) = 3n + 1000$์ Big-Oh Notation์ ํ๊ธฐํ๊ธฐ์ํด ์ ์๋ฅผ ๋ง์กฑํ๋ $c$์ $n0$๋ฅผ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค.
$c = 100$์ด๋ผ ํ๋ฉด $f(n) = 3n + 1000 ≤ 100n + 1000$์ด๋ฏ๋ก $n_0 > 1000$ ์ผ๋ ์ ์๋ฅผ ๋ง์กฑํฉ๋๋ค.
์ต๊ณ ์ฐจํญ์ด $d$์ธ ๋คํญ์์
์ ๋ฐ๋ผ $f(n) = O(n^d)$ ๋ผ๋ ์ ์ ์ฝ๊ฒ ์ฆ๋ช ๊ฐ๋ฅํฉ๋๋ค.
์ถ๊ฐ ์์๋ฅผ ํ์ด๋ณด์๋ฉด ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
โ๏ธ์ถ๊ฐ ์์
1. $f(n) = 30$์ผ ๋, f(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ Big-Oh Notation์ผ๋ก ํ๊ธฐํ์์ค.
2. $f(n) = 3n + 1000$์ผ ๋, f(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ Big-Oh Notation์ผ๋ก ํ๊ธฐํ์์ค.
3. $f(n) = 3n^2 - 4n + 2$์ผ ๋, f(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ Big-Oh Notation์ผ๋ก ํ๊ธฐํ์์ค.
4. $f(n) = 100n^3 + 10nlogn + 2$์ผ ๋, f(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ Big-Oh Notation์ผ๋ก ํ๊ธฐํ์์ค.
5. $f(n) = logn + 2loglogn - 3$์ผ ๋, f(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ Big-Oh Notation์ผ๋ก ํ๊ธฐํ์์ค.
6. $f(n) = 2^n+2$์ผ ๋, f(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ Big-Oh Notation์ผ๋ก ํ๊ธฐํ์์ค.
์ฐธ๊ณ
$f(n) = n!$์ผ ๋, f(n)์ ์๊ฐ ๋ณต์ก๋๋ $O(n^n) ์ ๋๋ค.
์ด๋ค ํจ์๋ฅผ Big-Oh notation์ผ๋ก ํํํ๋๋ฐ ์์ด์ ๋ช ๊ฐ์ง ๊ท์น์ด ์์ต๋๋ค.
1. ํจ์์ ๊ฐ term ์ coefficient ๋ ์๋ต ๊ฐ๋ฅ (ex : $13n^2 = O(n^2)$).
2. $a > b$ ์ธ ๊ฒฝ์ฐ $n^a$ ์ $n^b$ term ์ด ๊ฐ์ด ์์ผ๋ฉด $na$ term ๋ง ๋จ๊ธธ ์ ์์.
(์ด ๊ฒฝ์ฐ $na$ dominates $nb$๋ผ ํจ) ex:$ f(n) = nโด + n³ = O(nโด)$
3. ์ด๋ ํ exponential (์ง์ํจ์) term๋ polynomial term ์ dominate ํจ.
(ex : $1.00001^n$ dominates $n^100000000)$)
4. ์ด๋ ํ polynomial term ๋ logarithm (๋ก๊ทธ ํจ์) term ์ dominate ํจ.
(ex : $n $dominates $log_n100000000$)
Notation Ω (Omega) ์ ฯด (Theta) o(Little-Oh)
$f(n), g(n)$์ ๋ํด $f(n) = O(g(n))$๋ฅผ ๋ง์กฑํ๋ฉด $g(n) = Ω (f(n))$์ด๋ผ๊ณ ๋ํ๋ผ ์ ์์ต๋๋ค.
์ํ์ ๊ธฐํธ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
$∃ c, n_0 > 0$ such that $∀ n > n_0, g(n) ≥ c ⋅ f(n)$
$f(n) = O(g(n))$ ์๊ณผ ๋์์ $g(n) = O(f(n))$ ์ด๋ฉด $f = ฯด(g(n))$ ๊ทธ๋ฆฌ๊ณ $g = ฯด(f(n))$ ์ด๋ผ๊ณ ๋ํ๋ผ ์ ์์ต๋๋ค.
์ํ์ ๊ธฐํธ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
$ ∃ c_1, c_2, n_0 > 0$ such that $ ∀n > n_0, c _1⋅ f(n) ≤ g(n) ≤ c_2 ⋅ f(n)$
$f(n), g(n)$ ์ ๋ํด ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด $f(n) = o(g(n))$ ์ด๋ผ๊ณ ๋ํ๋ผ ์ ์์ต๋๋ค.
$∀ c, ∃ n_0 > 0$ such that $∀n ≤ n_0, f(n) ≤ c ⋅ g(n)$
์ค์ ์ฝ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ก ์ ์ธ ์ํ ์๊ฐ์ ๋ถ์ํ ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ์ฝ๋์์๋ 1) ๋ณ์์ ๋์ ํ์, 2) ๋ฐ๋ณต๋ฌธ (for, while…) ์์์ ๋ฐ๋ณต ํ์, 3) ํจ์์ ํธ์ถ ๋ฐ ๋ฆฌํด ์ ๋ฑ ๊ธฐ๋ณธ ์ฐ์ฐ๋ค์ ์ํ ํ์๊ฐ ์ ๋ ฅ ํฌ๊ธฐ์ ๋น๋กํ์ฌ ์ด๋ ์ ๋๋ก ์ปค์ง๋์ง ํ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
'Computer Science > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ๋ถํ ์ ๋ณต(2) - Multiplication (0) | 2022.09.29 |
---|---|
[Algorithm] ๋ถํ ์ ๋ณต(1) - Master Theorem๊ณผ ์ผ๋ฐํด (0) | 2022.09.28 |
[Algorithm] ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ(2) - Basic Arithmetic (0) | 2022.09.28 |
[Algorithm] Master Theorem ๋ง๋ณด๊ธฐ (0) | 2022.09.14 |
[Algorithm] ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ ๋ง๋ณด๊ธฐ (0) | 2022.09.13 |