From 19af50988d8442ee94ee0e20dbbc765908cec0a3 Mon Sep 17 00:00:00 2001 From: Wonsang Kim Date: Mon, 19 Feb 2024 22:09:34 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8B=A4=EC=9D=B4=EB=82=98=EB=AF=B9=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=98=EB=B0=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _posts/2024-02-08-dynamicprogramming.md | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/_posts/2024-02-08-dynamicprogramming.md b/_posts/2024-02-08-dynamicprogramming.md index 81f6f5d..a5b695c 100644 --- a/_posts/2024-02-08-dynamicprogramming.md +++ b/_posts/2024-02-08-dynamicprogramming.md @@ -66,14 +66,12 @@ $$ \sum_{j=1}^{k} ij = n $$ -
가격표 |*length i*|1|2|3|4|5|6|7|8|9|10| |---|---|---|---|---|---|---|---|---|---|---| |*price pi*|1|5|8|9|10|17|17|20|24|30| -
이렇게만 봐서는 문제를 이해하기 힘들 수 있습니다. 그럼 구체적인 예시를 들어볼까요? @@ -116,16 +114,11 @@ def cut_rod(p, n): 그럼 Rod Cutting 문제를 다이나믹 프로그래밍을 사용하여 효과적으로 계산한 것이 될까요? **그렇지 않습니다!** n이 10인 경우는 그 이전의 9일 때와 계산 시간에서 유의미한 차이를 보이지 않습니다만, 25와 26일때를 상정하여 코드를 돌려보았을 때 기하급수적인 차이를 관찰할 수 있습니다. -
- **소요시간** |*n*|25|26| |---|---|---| |*elapsed time*|00:00:14.8|00:00:32.2| -
- - 이유는 재귀 함수가 호출하는 수많은 서브 함수로 인해 시간복잡도가 무수히 늘어나기 때문이죠. 정확히는 2^n으로 기하급수적으로 함수호출의 개수가 늘어납니다. 몇가지 가정과 간단한 점화식으로 이를 증명해 보겠습니다. 위의 재귀적 정의나 코드에 따르면, 호출되는 함수의 개수를 T라고 할 때 0인 시점에 호출되는 함수를 1이라하고 시점이 1씩 늘어날 때마다 다음과 같은 산식이 됩니다. @@ -161,9 +154,7 @@ $$ T(n) - T(n-1) = T(n-1) \\ $$ $$ -T(n) = 2T(n-1) \\ -$$ -$$ +T( if n \geqq 2 $$ @@ -204,15 +195,11 @@ def cut_rod(p, n): return r[n] ``` -
- **소요시간** |*n*|25|26| |---|---|---| |*elapsed time*|00:00:00|00:00:00| -
- 끝으로 다이나믹 프로그래밍을 풀기위해 다음 4가지 단계를 다시 한번 더 리마인드 해보겠습니다. 그리고 꾸준히 문제를 푸는 것도 잊지 맙시다.