Skip to content

Commit

Permalink
다이나믹 프로그래밍
Browse files Browse the repository at this point in the history
  • Loading branch information
RossKWSang committed Feb 19, 2024
1 parent 121116e commit 19af509
Showing 1 changed file with 1 addition and 14 deletions.
15 changes: 1 addition & 14 deletions _posts/2024-02-08-dynamicprogramming.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,12 @@ $$
\sum_{j=1}^{k} ij = n
$$

<center>

가격표
|*length i*|1|2|3|4|5|6|7|8|9|10|
|---|---|---|---|---|---|---|---|---|---|---|
|*price pi*|1|5|8|9|10|17|17|20|24|30|

</center>

이렇게만 봐서는 문제를 이해하기 힘들 수 있습니다. 그럼 구체적인 예시를 들어볼까요?

Expand Down Expand Up @@ -116,16 +114,11 @@ def cut_rod(p, n):

그럼 Rod Cutting 문제를 다이나믹 프로그래밍을 사용하여 효과적으로 계산한 것이 될까요? **그렇지 않습니다!** n이 10인 경우는 그 이전의 9일 때와 계산 시간에서 유의미한 차이를 보이지 않습니다만, 25와 26일때를 상정하여 코드를 돌려보았을 때 기하급수적인 차이를 관찰할 수 있습니다.

<center>

**소요시간**
|*n*|25|26|
|---|---|---|
|*elapsed time*|00:00:14.8|00:00:32.2|

</center>


이유는 재귀 함수가 호출하는 수많은 서브 함수로 인해 시간복잡도가 무수히 늘어나기 때문이죠. 정확히는 2^n으로 기하급수적으로 함수호출의 개수가 늘어납니다. 몇가지 가정과 간단한 점화식으로 이를 증명해 보겠습니다.

위의 재귀적 정의나 코드에 따르면, 호출되는 함수의 개수를 T라고 할 때 0인 시점에 호출되는 함수를 1이라하고 시점이 1씩 늘어날 때마다 다음과 같은 산식이 됩니다.
Expand Down Expand Up @@ -161,9 +154,7 @@ $$
T(n) - T(n-1) = T(n-1) \\
$$
$$
T(n) = 2T(n-1) \\
$$
$$
T(
if n \geqq 2
$$

Expand Down Expand Up @@ -204,15 +195,11 @@ def cut_rod(p, n):
return r[n]
```

<center>

**소요시간**
|*n*|25|26|
|---|---|---|
|*elapsed time*|00:00:00|00:00:00|

</center>

끝으로 다이나믹 프로그래밍을 풀기위해 다음 4가지 단계를 다시 한번 더 리마인드 해보겠습니다. 그리고 꾸준히 문제를 푸는 것도 잊지 맙시다.


Expand Down

0 comments on commit 19af509

Please sign in to comment.