Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 네트워크 관리사 2급
- 패스트캠퍼스
- network
- ICQA
- Django
- 네트워크 자격증
- 머신러닝
- 실기
- Python
- 밑바닥부터 시작하는 딥러닝
- 파이썬
- 네트워크
- 알고리즘
- IPV4
- 서브넷마스크
- 딥러닝
- 자격증
- 코딩테스트
- 네트워크 관리사
- Windows Server
- 프로토콜
- Machine learning
- Protocol
- Algorithm
- FTP
- 기본 정렬
- 자료구조
- dns
- deep learning
- Dynamic Programming
Archives
- Today
- Total
쳉지로그
[알고리즘 이론] 동적 계획법(Dynamic Programming) 본문
동적 계획법(DP, Dynamic Programming)
- 입력 크기가 작은 부분 문제들을 해결한 후, 해당 부분 문제의 해를 활용하여 보다 큰 크기의 부분 문제를 해결. 최종적으로 전체 문제를 해결하는 알고리즘
- 상향식 접근으로, 가장 최하위 해답을 구한 후 이를 이용해서 상위 문제를 풀어가는 방식
- 문제를 잘게 분할할 때, 부분 문제는 서로 중복되어 재활용됨
- Memoization 기법 사용
(참고) 분할 정복이란?
- 문제를 나눌 수 없을 때까지 각각 나누어서 풀고, 다시 합병하여 문제의 답을 얻는 알고리즘
- 하향식 접근 방법 (일반적으로 재귀 함수로 구현)
- 문제를 잘게 분할할 때, 부분 문제는 서로 중복되지 않음(ex. 병합 정렬, 퀵 정렬)
예시) 피보나치 수열
# recursive call 사용
def fibo_with_recursion(num):
if num <= 1:
return num
return fibo_with_recursion(num-1) + fibo_with_recursion(num-2)
# DP(동적 계획법) 사용
def fibo_with_dp(num):
cache = [0 for i in range(num+1)]
cache[0] = 0
cache[1] = 1
for i in range(2. num+1):
cache[i] = cache[i-1] + cache[i-2]
return cache[num]
예시) 백준 11726. 2xn 타일링
'코딩테스트 > 알고리즘 이론' 카테고리의 다른 글
[알고리즘 이론] 병합 정렬 (Merge Sort) (0) | 2021.12.08 |
---|---|
[알고리즘 이론] 재귀 용법 (Recursive Call, 재귀 호출) (0) | 2021.12.07 |
[알고리즘 이론] 선택 정렬 (Selection Sort) (0) | 2021.12.07 |
[알고리즘 이론] 삽입 정렬 (Insertion Sort) (0) | 2021.12.06 |
[알고리즘 이론] 버블 정렬 (Bubble Sort) (0) | 2021.12.06 |
Comments