메모화를 배운
사전 쓰기
최근 Web계 기업의 인턴 전형이나 본 전형을 받을 기회가 몇번이나 있었습니다.
많은 기업의 전형에서 코딩 테스트가 있었고, 이번 조금 공부했기 때문에 아웃풋 연습도 겸해 비망록적인 느낌으로 남겨 둡니다.
이번은 메모화에 대해입니다.
메모화란?
간단히 말하면 프로그램 속도를 높이는 기술입니다.
「재귀 처리 등으로 몇번이나 같은 함수가 불릴 때에 계산 결과를 캐시(메모)에 기록해 두고, 전에 계산한 것에 관해서는 캐시된 값을 돌려준다」라고 하는 느낌의 테크닉입니다.
구현 예
이번에는 구현 예로서 피보나치 수열의 n번째 숫자는 무엇인가를 요구하는 프로그램을 소개합니다.
피보나치 수열
a_1=a_2=1 \\
a_n=a_{n−1}+a_{n−2}\\
(1\leqq n)
피보나치 수열을 점화식으로 나타내면 위와 같이 됩니다.
자세한 설명은 생략하지만 처음 두 항은 1을 반환하고 이후에는 이전 두 항의 합을 반환합니다.
그냥 재귀로 구현
def fibonacci(n):
if n == 1 or n == 2:
return 1
return fibonacci(n - 2) + fibonacci(n - 1)
print(fibonacci(6)) # 8
메모화로 구현
memo = {1: 1, 2: 1}
def fibonacci(n):
# memoの中にnが記録されている場合は、その値を返す
if n in memo:
return memo[n]
# ない場合はメモに記録して、その値を返す
memo[n] = fibonacci(n - 2) + fibonacci(n - 1)
return memo[n]
print(fibonacci(6)) # 8
이미지
단지 재귀로 실장했을 경우의 n=6은, fibonacci(4)가 2회, fibonacci(3)가 3회 불리고 있습니다.
n이 점점 커지면 계산하는 횟수가 늘어나는 것을 이미지 할 수 있다고 생각합니다.
메모화를 하면 1번 계산한 것에 대해서 2회째 이후는 계산하지 않아도 되므로 계산 횟수를 대폭 줄일 수 있습니다.
요약
Reference
이 문제에 관하여(메모화를 배운), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KenyaSugimoto/items/3736cb40a4dfdc922054텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)