작성
·
68
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
자두나무 문제에 대한 설명에서
.이 문제가 탑다운 dp란 설명에서 ' 이 재귀적인 DP는 필요한 부분의 배열만을 만든다는 것이 특징입니다. '
[출처] [알고리즘 강의] 7주차. DP, 동적계획법, 다이나믹프로그래밍|작성자 큰돌
라는 문장이 이해가 가지 않습니다.
필요한 부분의 배열만을 만든다는게 정확히 무슨말인가요?
또한,
탑다운 dp와 버텀업dp
위에서 아래로 간다 /아래에서 위로간다
라는 말이 완벽하게 이해가 가지 않습니다.
답변 2
0
안녕하세요 ㅎㅎ
네 좀 더 자세히 설명드리겠습니다.
탑다운 DP는 재귀적(recursive) 접근 방식으로, 문제를 상위에서 시작해 점차 작은 하위 문제로 나누어 해결해 나가는 방법입니다. 계산한 값을 저장해둬서 동일한 하위 문제가 다시 발생했을 때 이미 계산된 값을 재사용하는 방식입니다.
함수가 재귀적으로 자기 자신을 호출하며, 필요할 때 하위 문제의 결과를 가져옵니다.
예시로 피보나치를 들자면 다음과 같이 코드를 구축해야 합니다.
int fib(int n, vector<int>& memo) {
if (n <= 1) return n;
if (memo[n] != -1) return memo[n];
memo[n] = fib(n-1, memo) + fib(n-2, memo);
return memo[n];
}
버텀업 DP는 반복문(iterative)을 사용하여 작은 하위 문제부터 차근차근 해결하면서 점차 상위 문제를 해결해 나가는 방식입니다. 작은 문제를 먼저 해결하고 그 결과를 이용하여 더 큰 문제를 해결합니다.
보통 반복문을 사용하여 순차적으로 문제를 해결합니다.
예시로 피보나치를 들자면 다음과 같이 코드를 구축해야 합니다.
int fib(int n) {
if (n <= 1) return n;
vector<int> dp(n + 1);
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= n; ++i) {
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
그럼 어떤 것을 써야할까요?
둘 다 써도 됩니다. 어떤 것이 더 효율적이냐를 따졌을 때는
sparse하게 정점들이 분포된 경우 탑다운 방식이 유리할 수 있으며, 특정 조건에서는 바텀업 방식이 더 효율적일 수 있습니다.
직관적으로 탑다운을 쓰는게 나을 때도 있지만 성능적으로 보면 보통은 반복적 - for문을 쓰는 바텀업이 더 효율적이긴 합니다.
하지만 앞의 그림처럼 바텀업은 전부다 만들어야 하는데 정점자체가 sparse하게 분포되어있다면 -> 탑다운으로 하는게 더 유리할 수 있습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
wldls317님의 질문은 탑다운(Top-down) 방식과 바텀업(Bottom-up) 방식의 다이나믹 프로그래밍(DP)에 대한 구체적인 설명을 요구하고 있습니다. 이와 관련하여, 탑다운 방식이란 재귀적 접근을 사용하여 상위 문제에서 하위 문제로 내려가는 방식을 말하며, 필요한 부분만 계산하여 메모리 효율성을 높일 수 있는 방식입니다. 반면, 바텀업 방식은 반복문(iteration)을 사용하여 하위 문제부터 차례대로 해결해나가며 상위 문제의 해답에 도달하는 방식을 의미합니다. 바텀업 방식에서는 모든 문제의 해를 저장하고 참조하기 때문에, 필요한 모든 계산을 수행한다는 특성이 있습니다.
이와 관련된 상세한 설명과 구체적인 예시를 원하시는 경우, 다음의 링크들이 도움이 될 것입니다.
DP 풀이방법에 있어 탑바텀, 바텀업 풀이 방식의 선택 방식: 이 링크에서는 DP 문제를 접근할 때 탑다운과 바텀업 방식 중 어떤 방식을 선택해야 하는지에 대한 고민과 결정 기준에 대한 설명이 담겨 있습니다. 특히 데이터가 sparse하게 분포된 경우 탑다운 방식이, 그렇지 않은 경우 대부분 바텀업 방식이 더 효율적일 수 있다는 설명이 포함되어 있습니다.
dp 관련 질문드립니다: 이 링크에서는 DP 문제의 탑다운 방식과 바텀업 방식 모두 사용 가능한지, 그리고 어떤 상황에서 어떤 접근 방식을 선택하는 것이 좋은지에 대한 설명이 있습니다. 특정 상황에서 탑다운 방식이 바텀업 방식보다 유리할 수 있다는 실제 예시와 함께 각 방식의 필요성과 효율성에 대해 설명합니다.
위 링크들은 탑다운과 바텀업 DP의 개념을 이해하고, 어떻게 해결 방법을 결정하는지에 대한 질의응답 예시를 제공하여, wldls317님의 질문에 대한 답변을 찾는데 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.