Tags
- Article & User
- regexp
- migrations
- create
- 트리
- 큐
- Django
- stack
- N:1
- 스택
- 쟝고
- SQL
- DB
- outer join
- count
- 그리디
- drf
- update
- ORM
- 통계학
- 이진트리
- delete
- Vue
- M:N
- 완전검색
- distinct
- Tree
- Queue
- 뷰
- 백트래킹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Notice
Recent Posts
Link
데이터 분석 기술 블로그
스택 - DP(Dynamic Programming) 본문
1. DP(Dynamic Programming)
- 동적 계획 (Dynamic Programming) 알고리즘은 그리디 알고리즘과 같이 최적화 문제를 해결하는 알고리즘입니다.
- 동적 계획 알고리즘은 먼저 입력 크기가 작은 부분 문제들을 모두 해결한 후에 그 해들을 이용하여 보다 큰 크기의 부분 문제들을 해결하여, 최종적으로 원래 주어진 입력의 문제를 해결하는 알고리즘입니다.
2. 피보나치 수 DP 적용
- 피보나치 수는 부분 문제의 답으로부터본 문제의 답을 얻을 수 있으므로 최적 부분 구조로 이루어져 있습니다.
- 1) 문제를 부분 문제로 분할합다.
- Fibonacci(n) 함수는 Fibonacci(n-1)과 Fibonacci(n-2)의 합
- Fibonacci(n-1)은 Fibonacci(n-2)와 Fibonacci(n-3)의 합
- Fibonacci(2)는 Fibonacci(1)과 Fibonacci(0)의 합
- Fibonacci(n)은 Fibonacci(n-1), Fibonacci(n-2),..., Fibonacci(2), Fibonacci(1), Fibonacci(0)의 부분집합으로 나뉩니다.
- 2) 부분 문제로 나누는 일을 끝냈으면 가장 작은 부분 문제부터 해를 구합니다.
- 3) 그 결과는 테이블에 저장하고, 테이블에 저장된 부분 문제의 해를 이용하여 상위 문제의 해를 구합니다.
# 피보나치 수 DP 적용 알고리즘
def fibo2(n):
f = [0] * (n+1)
f[0] = 0
f[1] = 1
for i in range(2, n+1):
f[i] = f[i-1] + f[i-2]
return f[n]
3. DP의 구현 방식
- recursive 방식 : fib1()
- iterative 방식 : fib2()
- memoization을 재귀적 구조에 사용하는 것보다 반복적 구조로 DP를 구현한 것이 성능 면에서 보다 효율적입니다.
- 재귀적 구조는 내부에 시스템호출 스택을 사용하는 오버헤드가 발생하기 때문입니다.
'알고리즘' 카테고리의 다른 글
스택 - 계산기1 (0) | 2024.06.02 |
---|---|
스택 - DFS(깊이우선탐색) (0) | 2024.06.01 |
스택 - Memoization (0) | 2024.05.30 |
스택 - 재귀호출 (0) | 2024.05.29 |
스택(stack) (0) | 2024.05.28 |