πμλ£κ΅¬μ‘°/πμκ³ λ¦¬μ¦ - 12
νμ΅κΈ°λ‘
μ€λ λ€μ κ°μ λͺ©λ‘
- μ¬κ· - 2
- μ¬κ· - 3
μ¬κ· ν¨μ
μ¬κ· ν¨μλ μκΈ° μμ μ νΈμΆνλ ν¨μλ₯Ό λ§νλ€.
μ¬κ·ν¨μ (리μ€νΈμ ν©)
listμ 0λ²μ§Έ μμ + μ¬λΌμ΄μ±μ μ΄μ©ν΄μ listμ 1λ²μ§Έ μμλΆν° λ§μ§λ§ μμκΉμ§ μ΄λ£¨μ΄μ§ 리μ€νΈ list[1:]λ₯Ό SumListμ λκΈ΄ κ²°κ³Όκ°μ μ΄μ©ν΄μ μμ±νλ€.
list = [1,2,3,4,5,6]
def SumList(list):
if len(list) > 1:
return list[0] + SumList(list[1:])
return list[0]
SumList(list)
μκ°λ³΅μ‘λ : $O(n)$
곡κ°λ³΅μ‘λ : $O(n^2)$
μ¬κ·ν¨μ (νλ¬Έ νλ³)
def IsPalindrome(str):
if len(str) <= 1:
return True
return (str[0] == str[-1]) and IsPalindrome(str[1:-1])
μκ°λ³΅μ‘λ : $O(n)$
곡κ°λ³΅μ‘λ : $O(n^2)$
μ¬κ·ν¨μ (nμ 1, 2, 3μΌλ‘ λνλΌ μ μλ κ²½μ°μ μ)
called = 0
def comb(n):
print("comb : ", n)
global called
called += 1
if n == 1:
return 1
elif n == 2:
return 2
elif n == 3:
return 4
return comb(n - 1) + comb(n - 2) + comb(n - 3)
n = 10
print(comb(n), " : ",called)
μκ°λ³΅μ‘λ : μ½ $O(2^n)$ (κ³μ°μ μ΄λ»κ² ν΄μΌν μ§.. κ·Έλ₯ nμ λ°λΌμ νΈμΆνμλ₯Ό λ€λ₯Έ κ·Έλνλ λΉκ΅ν΄λ΄) 곡κ°λ³΅μ‘λ : μκ°λ³΅μ‘λμ λ? μμ² ν¬λ€
ν¨μ νΈμΆ νμλ nμ΄ 10μΌλ, 157λ²μ΄λ€.
μ΅μ ν(λ©λͺ¨μ΄μ μ΄μ , λμ€μ DPλΆλΆμμ λμ΄)
μ¬λ¬λ² ꡬνλ κ°μ λ©λͺ¨ν΄λκ³ λ€μμ νμν λ κ³μ°νμ§ μκ³ κΊΌλ΄μ μ΄λ€.
comb(8) -> comb(7), comb(6), comb(5)
comb(7) -> comb(6), comb(5), comb(4)
comb(6) -> comb(5), comb(4), comb(3)
comb(5) -> comb(4), comb(3), comb(2)
comb(4) -> comb(3), comb(2), comb(1)
comb(3) -> comb(2), comb(1)
comb(2) -> comb(1)
μμμ 보면 comb(8)μμ comb(7), comb(6), comb(5)λ₯Ό νΈμΆνλλ°,
comb(7)μμ comb(6), comb(5)λ₯Ό λ€μ νΈμΆνκ² λλ€.
μ΄λ κ² μ€λ³΅λλ κ³μ°μ΄ λ§μμ μ¬μ©νλ κ²μ΄ λ©λͺ¨μ΄μ μ΄μ
μΈλ°,
λ©λͺ¨μ΄μ μ΄μ
μ ν΅ν΄μ μ€λ³΅λλ κ³μ°μ νκΈ°μ μΌλ‘ μ€μΌ μ μλ€.
λ©λͺ¨μ΄μ μ΄μ
μ ν΅ν΄μ μ€λ³΅λλ κ³μ°μ μ€μ΄λ©΄
κ° ν¨μλ₯Ό νλ²μ©λ§ νΈμΆνλ©΄ κ·Έ νμλ κ³μ°ν νμ μμ΄ memoμ μ μ₯λ κ°μ μ΄μ©νλ©΄ λλ€.
μκ°λ³΅μ‘λ : $O(n)$
곡κ°λ³΅μ‘λ : $O(n)$
ν¨μ νΈμΆ νμλ nμ΄ 10μΌλ, 7λ²μ΄λ€.
λ§μ§λ§
DPκ° ν κ°μ’λ‘ κ΅¬μ±λμ΄μλλ°, μ΄κ² λ§λ μΆλ€.
λ€μ λ€λ₯Έ κ°μμμ κ°μ΄ λ³νν κ² κ°κΈ°λ νκ³ ,
μλλ©΄ μκ³ λ¦¬μ¦ λ©΄μ λ±μμλ μ μλμ€λ? μΆκΈ°λ?
(μκ³ λ¦¬μ¦ λνμλ λ¨κ³¨μ΄λλ°..)
λκΈλ¨κΈ°κΈ°