Home > Data Structure > 🧩 [Data Structure] μž¬κ·€ ꡬ쑰의 예(1) - μˆ˜μ—΄

🧩 [Data Structure] μž¬κ·€ ꡬ쑰의 예(1) - μˆ˜μ—΄
Data Structure

🧩 [Data Structure] μž¬κ·€ ꡬ쑰의 예(1) - μˆ˜μ—΄

βœ…1️⃣ μˆ˜μ—΄.

  • 1. μ΄ˆν•­(First Term)
    • β†˜οΈŽ μ •μ˜ : μˆ˜μ—΄μ—μ„œ 첫 번째 항을 μ˜λ―Έν•¨.
    • β†˜οΈŽ 기호 : 일반적으둜 μ΄ˆν•­μ€ $a_1$ λ˜λŠ” $a$둜 λ‚˜νƒ€λƒ„.
    • β†˜οΈŽ μ˜ˆμ‹œ :
      • μˆ˜μ—΄: 2, 4, 6, 8, …
      • μ΄ˆν•­: $a_1 = 2$
  • 2. 곡차(Common Difference)
    • β†˜οΈŽ μ •μ˜ : λ“±μ°¨μˆ˜μ—΄μ—μ„œ μ—°μ†λœ 두 ν•­μ˜ 차이λ₯Ό μ˜λ―Έν•¨.
    • β†˜οΈŽ 기호 : 일반적으둜 κ³΅μ°¨λŠ” $d$둜 λ‚˜νƒ€λƒ„.
    • β†˜οΈŽ 곡식 :
      • β†˜οΈŽ $d = a_{n+1} - a_n$
    • β†˜οΈŽ μ˜ˆμ‹œ :
      • β†˜οΈŽ μˆ˜μ—΄ : 2, 4, 6, 8, …
      • β†˜οΈŽ 곡차 : $d = 4 - 2 = 2$
  • 3. 점화식 (Recurrence Relation)
    • β†˜οΈŽ μ •μ˜ : μˆ˜μ—΄μ˜ 각 항을 이전 ν•­(λ˜λŠ” λͺ‡ 개의 ν•­)을 μ΄μš©ν•΄ ν‘œν˜„ν•œ μ‹μž„.
    • β†˜οΈŽ 기호 : 보톡 $a_{n+1} = a_n + d$ ν˜•νƒœλ‘œ λ‚˜νƒ€λ‚¨.
    • β†˜οΈŽ μ˜ˆμ‹œ :
      • β†˜οΈŽ μˆ˜μ—΄ : 2, 4, 6, 8, …
      • β†˜οΈŽ 점화식 : $a_{n+1} = a_n + 2$
  • 4. λ“±μ°¨μˆ˜μ—΄ (Arithmetic Sequence)
    • β†˜οΈŽ μ •μ˜ : μ—°μ†λœ ν•­λ“€μ˜ 차이가 μΌμ •ν•œ μˆ˜μ—΄.
    • β†˜οΈŽ μΌλ°˜ν•­ 곡식 :
      • β†˜οΈŽ $a_n = a + (n-1)d$
        • β†˜οΈŽ $a$ : μ΄ˆν•­
        • β†˜οΈŽ $d$ : 곡차
        • β†˜οΈŽ $n$ : ν•­μ˜ 번호
    • β†˜οΈŽ μ˜ˆμ‹œ :
      • β†˜οΈŽ μˆ˜μ—΄ : $2, 4, 6, 8, …$
      • β†˜οΈŽ μ΄ˆν•­ : $a = 2$
      • β†˜οΈŽ 곡차 : $d = 2$
      • β†˜οΈŽ 5번 μ§Έ ν•­ : $a_5 = 2 + (5-1) \cdot 2 = 10$

βœ…2️⃣ μž¬κ·€μ  ꡬ쑰 μ•Œκ³ λ¦¬μ¦˜ μ˜ˆμ‹œ.

πŸ“Œ λ“±μ°¨μˆ˜μ—΄

  • β†˜οΈŽ $a_n = a_{n-1}+3, a_1 = 1$
    • β†˜οΈŽ μ΄ˆν•­μ΄ 1, 곡차가 3인 λ“±μ°¨μˆ˜μ—΄μ˜ 점화식.
      • β†˜οΈŽ μˆ˜μ—΄μ˜ n번째 μ›μ†ŒλŠ” μžμ‹ κ³Ό 성격이 λ˜‘κ°™μ§€λ§Œ μˆœμ„œκ°€ ν•˜λ‚˜ μž‘μ€ $(n-1)$번째 μ›μ†Œμ— 3을 λ”ν•œ κ²ƒμž„.
      • β†˜οΈŽ 첫 번째 μ›μ†ŒλŠ” 1.
        • β†˜οΈŽ 이것을 μž¬κ·€ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ κ΅¬ν˜„ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€.
            seq(n):
            if (n = 1)
                return 1
            else
                return seq(n-1) + 3
          
        • β†˜οΈŽ μ•Œκ³ λ¦¬μ¦˜ seq(n)은 seq(n-1)을 호좜, seq(n-1)은 seq(n-2)λ₯Ό 호좜.
        • β†˜οΈŽ seq(n-2)λŠ” seq(n-3)을 ν˜ΈμΆœβ€¦ seq(2)λŠ” seq(1)을 ν˜ΈμΆœν•˜κ³ , seq(1)은 1을 λ¦¬ν„΄ν•˜κ³  끝남.
        • β†˜οΈŽ seq(1)이 λλ‚˜λ©΄ μ—­μˆœμœΌλ‘œ 진행됨.
        • β†˜οΈŽ seq(2)λŠ” seq(1)의 리턴 값을 λ°›μ•„ 3을 더해 리턴
        • β†˜οΈŽ seq(3)은 seq(2)의 리턴 값을 λ°›μ•„ 3을 더해 리턴
        • β†˜οΈŽ seq(4)λŠ” seq(3)의 리턴 값을 λ°›μ•„ 3을 더해 리턴
        • β†˜οΈŽ seq(n)은 seq(n-1)의 리턴 값을 λ°›μ•„ 3을 더해 λ¦¬ν„΄ν•˜λ©΄μ„œ 전체가 끝남.
          • β†˜οΈŽ λ“±μ°¨μˆ˜μ—΄μ€ κ²°κ³Όλ₯Ό λ°”λ‘œ 계산할 수 μžˆλŠ” 식이 μžˆμ–΄ ꡳ이 μ΄λ ‡κ²Œ ꡬ할 ν•„μš”κ°€ μ—†μ§€λ§Œ κ·Έ 속에 μž¬κ·€μ  ꡬ쑰가 μžˆμŒμ„ λ§ν•˜λ €λŠ” 것이닀.
  • β†˜οΈŽ μž¬κ·€ μ•Œκ³ λ¦¬μ¦˜μ€ λ°˜λ³΅ν•΄μ„œ ν˜ΈμΆœν•˜λ‹€κ°€ μ–Έμ  κ°€ λλ‚˜μ•Ό ν•˜λŠ”λ° 이λ₯Ό μœ„ν•œ 경계 쑰건을 항상 κ°–κ³  μžˆμ–΄μ•Ό ν•œλ‹€.
    • β†˜οΈŽ μœ„ μ•Œκ³ λ¦¬μ¦˜μ—μ„œλŠ” if(n=1)이 경계 쑰건이닀
      • β†˜οΈŽ μˆ˜μ—΄μ˜ μ΄ˆν•­μ— ν•΄λ‹Ήν•œλ‹€.

        πŸ“Œ ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄

  • β†˜οΈŽ ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄μ€ λ‹€μŒκ³Ό κ°™λ‹€.
    • β†˜οΈŽ 첫 두 항은 1이고, λ‚˜λ¨Έμ§€ 항은 각각 직전 두 항을 λ”ν•œ 값이닀.
    • β†˜οΈŽ $f_n = f_{n-1} + f_{n-2}, f_1 = f_2 = 1$
      • β†˜οΈŽ 이것을 μž¬κ·€ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ κ΅¬ν˜„ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.
          fib(n):
          if (n = 1 or n = 2)
              return 1
          else
              return fib(n-1) + fib(n-2)
        
  • β†˜οΈŽ μ΄λŠ” μž¬κ·€ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ κ΅¬ν˜„ν•œ 치λͺ…적인 μ˜ˆλ‹€.
    • β†˜οΈŽ μ‹œκ°„μ΄ λ„ˆλ¬΄ 많이 걸리기 λ•Œλ¬Έμ΄λ‹€.
    • β†˜οΈŽ μ§€μˆ˜ν•¨μˆ˜μ μœΌλ‘œ μ¦κ°€ν•œλ‹€λŠ” λŠλ‚Œμ΄λ‹€.
      • β†˜οΈŽ μ΄λ ‡κ²Œ μ—„μ²­λ‚œ μ‹œκ°„μ΄ κ±Έλ¦¬λŠ” μ΄μœ λŠ” ν•œ 번 계산해놓은 κ²°κ³Όλ₯Ό 계속 ν˜ΈμΆœν•˜μ—¬ μ§€μˆ˜ν•¨μˆ˜μ μΈ 쀑볡을 μΌμœΌν‚€κΈ° λ•Œλ¬Έμ΄λ‹€.
      • β†˜οΈŽ 이 문제λ₯Ό μ•„λž˜μ™€ 같이 κ³„μ‚°ν•˜λ©΄ fib_fase(100)은 천만 λΆ„μ˜ 1μ΄ˆλ„ 걸리지 μ•ŠλŠ”λ‹€.
          fib_fast(n):
          f[1] ← f[2] ← 1 β—€οΈŽ "f[2] ← 1"κ³Ό "f[1] ← 1"을 ν•œκΊΌλ²ˆμ— 적어놓은 것
          for i ← 3 to n
              f[i] ← f[i-1] + f[i-2]
              return f[n]
        
  • β†˜οΈŽ μž¬κ·€λŠ” 문제λ₯Ό ν•΄κ²°ν•˜λŠ” μœ μš©ν•œ λ„κ΅¬μ΄μ§€λ§Œ 잘λͺ» μ“°λ©΄ 치λͺ…적이닀.
  • β†˜οΈŽ μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜μ—μ„œλŠ” 주둜 μž¬κ·€κ°€ μœ μš©ν•  κ²½μš°μ— μ‚¬μš©ν•œλ‹€.