[WIP] 비 CS 담당자가 동적 프로그래밍(DP)을 설명합니다.
2070 단어 career
요약
방법
찬성
범죄자
시간 복잡도
공간 복잡성
1. 재귀
직관적
시간 제한을 초과할 수 있음
O(d^N), 여기서 d = 각 재귀 단계에서 선택할 수 있는 수
오(1)
2. 메모이제이션(하향식)
직관적, 시간 절약
스택 오버플로 가능
O(N), 모든 반복 함수 호출은 메모/dp 테이블에서 검색됩니다.
켜짐)
3. 표 작성(상향식)
시간 절약
직관적이지 않음
켜짐)
O(1) ~ O(N)
이 게시물이 여러분이 지속적으로 DP Hard 문제를 해결하는 데 도움이 되는 학습 내용을 문서화하기를 바랍니다.
If I had to count the number of times I solved Fibonacci...
예 1: 계단 오르기(Leetcode: 쉬움)
Here 내 솔루션입니다.
아이디어
예 2: 경계를 벗어난 경로(Leetcode: Medium)
3D 메모이제이션이 여기서 작동합니다. 극단적인 모드로 Tabulation에 들어갈 필요가 없습니다.
dp = [[[-1] * (maxMove + 1) for _ in range(n+1)] for _ in range(m+1)]
def dfs(r,c,k):
if k < 0:
return 0
if r < 0 or c < 0 or r == m or c == n:
return 1
if dp[r][c][k] != -1:
return dp[r][c][k]
dp[r][c][k] = dfs(r-1,c,k-1) + dfs(r+1,c,k-1) + dfs(r,c-1,k-1) + dfs(r,c+1,k-1)
return dp[r][c][k]
return dfs(startRow, startColumn, maxMove) % (10 ** 9 + 7)
할 것
더 많은 문제를 해결하고 개념을 추출
Reference
이 문제에 관하여([WIP] 비 CS 담당자가 동적 프로그래밍(DP)을 설명합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/c6z3h/wip-non-cs-person-explains-dynamic-programming-dp-341o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)