- μ²μμΈ μ£Όμ μ μ΄λΌ μ΄λ ΅λ€
; κ° μ μΌλ‘ recursiveκ° μ €λ£¨ μ΄λ €μ.(μΌλ¨ μ λ);
- ν¨μμ μ§ν©μ λνλ΄λλ°, μΈκ°μ§ ννλ°©λ²μ΄ μλ€. - Ξ, Ξ©, ΞΈ
- Ξ(f(n)) : f(n)μ μ΅κ³ μ°¨μ μ΄νμ λͺ¨λ μλ€μ ν¬ν¨νλ μ§ν©
- Ξ©(f(n)) : f(n)μ μ΅κ³ μ°¨μ μ΄μμ λͺ¨λ μλ€μ ν¬ν¨νλ μ§ν©
- ΞΈ(f(n)) : κ³μλ₯Ό 무μνκ³ , μ΅κ³ νμ΄ μ ννκ² f(n)μ΄ λλ ν¨μλ€μ μ§ν©
~cpp
ΞΈ(f(x)) = Ξ(f(x)) β©Ξ©(f(x))
ex)
1. g(n) β Ξ(f(n)) β f(n) β Ξ©(g(n))
- g(n)μ f(n) μ΄νμ΄λ€.
2. g(n) β ΞΈ(f(n)) β f(n) β ΞΈ(f(n))
- g(n)κ³Ό f(n)μ μ΅κ³ μ°¨λ κ°λ€.
3. a,b > 1 μ λν΄μ
log n β ΞΈ(log n)
a b
β΅ log n = log n / log a = 1/log a * log n
a b b b b
- log ν¨μλ baseμ κ΄κ³μμ΄ κ°μ μ°¨μμ΄λ€.
4. b > a > 0
- a^n β Ξ(b^n)
- a^n notβ ΞΈ(b^n)
5. a^n ? n!
- a^n β Ξ(n!)
- a^n notβ ΞΈ(n!)
cf. log n < n < n*log n < n^2 < ... < n^100 < 2^n < 3^n < n!
κΉμ±κΆ κ΅μλ - μκ³ λ¦¬μ¦ λ
ΈνΈμμ μ 리 --μ΄μ μ°
- μμμ λ€μμΌλ‘ μκ°μ΄ λ°λμμ΅λλ€. λ°λ³΅νμλ₯Ό λ£λλ€κΈ° 보λ€λ... ~μ λΉλ‘νλ€λΌλ μμΌλ‘.. μλ₯Ό λ€μ΄ λ°λ³΅νμκ° n+3 μ΄λ°μμ΄λΌλ O(n)μ΄λ κ² λλ κ²μ΄μ Έ..λ§μκΉ?--;
- μ΄κ²μ μ΄ν΄νκΈ° μν μμ€
~cpp
// xμ nμΉμ ꡬνλ ν¨μ.
double lalala(double x, int n)
{
double y=1.0;
while(n--) y *= x;
return y;
}
- μ΄ ν¨μμ μνμκ°μ ꡬνλ©΄ O(n)μ΄ λλ€. μλ? μ΄ ν¨μμ μνμκ°μ μ’μ°νλ λΆλΆμ whileλ¬ΈμΌκ²μ΄λ€. whileλ¬Έμμ nλ² λλκΉ O(n)μ΄ λλ κ²...(λ§λ?--;) κ·Έλ°λ°! μ΄ ν¨μλ³΄λ€ μ긴건 볡μ‘νμ§λ§ ν¨μ¨μ΄ μ’μ ν¨μλ₯Ό λ§λ€μ μλ€.
~cpp
// xμ nμΉμ ꡬνλ λλ€λ₯Έ ν¨μ
double lalala2(double x, int n)
{
double temp=1.0;
if(n == 0) return 1.0;
if(n == 1) return x;
if(n%2) /* nμ΄ νμμ΄λ©΄ */ // μ¬κ· νΈμΆμ μΌμ΅λλ€.
{
temp = lalala2(x, n/2);
return temp*temp*x;
}
else /* nμ΄ μ§μμ΄λ©΄ */
{
temp = lalala2(x, n/2);
return temp*temp;
}
}
- μ΄ ν¨μμ μνμκ°μ ꡬνλ©΄ O(log2n)μ΄ λλ€! κ³ λ±νκ΅ λ λ°°μ΄ λ°μ μνλ©΄ n>log2n μ΄λΌλ μ μ€μ΄..--;(logλ€μ μ«μ 2λ λ°μ
λλ€.)
- μ΄ μμ€λ€μ μλ‘ λ μ΄μ λ κ°μ κΈ°λ₯μ νλ ν¨μλΌλ ν¨μ¨μ±μ λ°μ Έ κ°λ©΄μ λ§λ€λ©΄ μ’λ€λ..
; κ²λλ€..;
- O(log2n)μ΄κ² μ μ΄λ κ² λλμ§ λͺ¨λ₯΄λ μ¬λμ μν΄.. κ·λ©λ²μ μ°λλ‘ νκ² μ΅λλ€.
~cpp
μ¬κΈ°μ x^2n=(x^n)^2, x^(2n+1)=(x^n)^2 * x μ΄λ κ² μΈμ μκ² μ£ ?
n=1 : f(1)=0
n=2 : f(2)=1
n=4 : f(4)=f(2)+1=2
n=8 : f(8)=f(4)+1=3
...
n=2^k : f(2^k)=k
κ·Έλ¬λ―λ‘ log2k κ° λλ κ²μ
λλ€.