U E D R , A S I H C RSS

Data Structure/Foundation



1. κΈ°λ³Έ κ°œλ…

  • 처음인 μ£Όμ œμ— 열라 μ–΄λ ΅λ‹€; 갠적으둜 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 κ°€ λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

  • 이건 또 μ–Όλ§ˆμ „μ— λ³Έ 글인데.. μž¬κ·€ν˜ΈμΆœμ€ 가급적 쓰지 말라 ν•˜λ”κ΅°μš”. μ € μžμ‹ λ„ μ—„μ²­ μ‹«μ–΄ν•©λ‹ˆλ‹€.
    • 기본적으둜 ν•¨μˆ˜λΌ ν˜ΈμΆœν•˜λŠ” 것 μžμ²΄κ°€ ν•˜λ‚˜μ˜ Overhead이며, μž¬κ·€ν˜ΈμΆœμ˜ 경우 계속 ν•¨μˆ˜μŠ€νƒμ— ν•΄λ‹Ή ν•¨μˆ˜μ½”λ“œλΆ€λΆ„μ΄ μŒ“μ—¬λ‚˜κ°€λŠ” 것이λ€λ‘œ, n 의 값이 컀질 경우 λ©”λͺ¨λ¦¬λΌ 많이 μ΄μš©ν•˜κ²Œ λ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ, μž¬κ·€ν˜ΈμΆœμ˜ ν‘œν˜„λ²•μ€ 일반 μˆ˜μ—΄μ˜ ν‘œν˜„μ‹μ„ 거의 κ·ΈλŒ€λ‘œ μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ½”λ“œκ°€ κ°„λ‹¨ν•΄μ§‘λ‹ˆλ‹€.

1.1. 파슀칼의 μ‚Όκ°ν˜•

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:05
Processing time 0.0303 sec