๐Ÿ’พ memoization

Lana Chungยท2021๋…„ 6์›” 11์ผ
0

algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
4/4

์˜ค๋Š˜ ๋ฐฐ์šธ ๊ฒƒ

  • ์žฌ๊ท€์™€ ๋ถ„ํ•  ์ •๋ณต
  • ๋ฉ”๋ชจ์ด์ œ์ด์…˜
  • ๋ฌธ์ œํ•ด๊ฒฐ์„ ์œ„ํ•œ ๊ณ ๋ ค์‚ฌํ•ญ

Memoization

๋ถ„ํ• ๋œ ์„œ๋ธŒ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐ˜๋ณต๋˜๋Š” ํ•ด๊ฒฐ๋ฒ•์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•
(Dynamic Programming์—์„œ ํ™œ์šฉ๋จ)

  • ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์†๋„๊ฐ€ ๋นจ๋ผ์ง
  • ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ์†Œ์‹œํ‚ค๊ณ , ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ฆ๊ฐ€์‹œํ‚ด
  • ๋ฐฉ๋ฒ•: ๋ฐ˜๋ณต๋˜๋Š” ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ํŠน์ • ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค
  • 'getting memo'๋กœ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ ์ €์žฅ
  • ๊ฐ™์€ ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ 'calling function'์„ ํ™œ์šฉํ•˜์—ฌ ์žฌ์‚ฌ์šฉ
# ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ์ ์šฉ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ

def recursive_factorial(n): # ์ตœ์ƒ์œ„ ํ˜ธ์ถœ
    if n is 0:
        return 1
    else:
        return n * recursive_factorial(n - 1) # ํ•จ์ˆ˜ ๋‚ด๋ถ€
  • ์ตœ์ƒ์œ„ ํ˜ธ์ถœ์—์„œ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์‚ฐ์„ ์ง„ํ–‰ํ•œ๋‹ค
  • recursive_factorial(3)์ธ ๊ฒฝ์šฐ ํ˜ธ์ถœ์ˆœ์„œ
    1. factorial(3) ํ˜ธ์ถœ
    1. factorial(3) ์ˆ˜ํ–‰์ดํ›„ factorial(2) ํ˜ธ์ถœ
    2. ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ™œ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, factorial(3), factorial(2) ๋‘ ํ•จ์ˆ˜ ๋ชจ๋‘ factorial(2) ๋กœ์ง์„ ๊ณ„์‚ฐํ•จ
      (ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ˆซ์ž๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ๋™์ผํ•œ ๋กœ์ง์— ๋Œ€ํ•œ ๊ณ„์‚ฐ์ˆ˜ ์ฆ๊ฐ€)
memo = {} # ๊ณ„์‚ฐ ๊ฒฐ๊ณผ ์ €์žฅํ•  ๋”•์…”๋„ˆ๋ฆฌ

def factorial(n):
	if n == 0:
    	return 1
    elif n in memo: # ์žฌ๊ท€ ํ•จ์ˆ˜ ๊ณ„์‚ฐํ•˜๋ฉด์„œ ์ €์žฅ๋๋‹ค๋ฉด
    	return memo[n]
    else:
    	result = n * factorial(n-1)
        memo[n] = result # ๋ฉ”๋ชจ์žฅ์— ๊ณ„์‚ฐํ•œ n, ๊ณ„์‚ฐ ๊ฒฐ๊ณผ ์ €์žฅ
        return result

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด factorial(5)ํ•˜๊ณ  factorial(4)ํ•  ๋•Œ, 4 ๊ฐ’์€ 24๋กœ memo์— ์ €์žฅํ•ด ๋†จ๊ธฐ ๋•Œ๋ฌธ์— ๋‘๋ฒˆ์งธ factorial ํ•จ์ˆ˜ ํ˜ธ์ถœ์—์„œ๋Š” ๋กœ์ง ๊ณ„์‚ฐ ํ•„์š”์—†์ด ๋ฐ”๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
๊ทธ๊ฒŒ ์‰ฌ์šด ์ผ์ด์—ˆ๋‹ค๋ฉด, ์•„๋ฌด๋Ÿฐ ์ฆ๊ฑฐ์›€๋„ ์–ป์„ ์ˆ˜ ์—†์—ˆ์„ ๊ฒƒ์ด๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€