"메모이제이션은 아래로 재귀하고 기억해. 테이블화는 뒤집어: 가장 작은 답에서 시작해 위로 지어, 큰 답이 떨어질 때까지 테이블을 채워. 같은 DP, 반대 방향, 재귀 전혀 없음."
아래로 재귀하는 대신 위로 짓기
테이블화 (tabulation)는 bottom-up 동적 계획법이야. 큰 문제에서 시작해 base case 로 재귀하는 대신, base case 에서 시작해 테이블을 앞으로 반복 채워, 이미 채운 항목으로 각 항목을 계산하며, 원한 답에 닿을 때까지. 재귀 없음 — 테이블 위 평범한 루프야. base case 가 씨앗; 마지막 칸이 결과. 피보나치 bottom-up: dp[0]=0, dp[1]=1, 그다음 dp[i] = dp[i-1] + dp[i-2] 를 n 까지 루프.
새로운 도전 하나: 채우는 순서
테이블화가 들이는 함정은 순서야: 항목을 계산할 때 그게 의존하는 모든 게 이미 거기 있도록 테이블을 채워야 해. 피보나치엔 자명하게 왼쪽에서 오른쪽. 2D DP (편집 거리 같은) 엔, 행별로, 또는 의존성을 존중하는 어떤 순서로든 채우기. 메모이제이션은 순서를 자동으로 다뤘어 (재귀가 의존성을 필요할 때 계산); 테이블화는 네가 생각하게 해. 그게 거래야: 테이블화는 앞에 설계 노력을 더 요구해, 재귀를 잃는 대가로.
공간 승리: 필요한 것만 유지
테이블화가 메모이제이션이 쉽게 못 맞추는 아름다운 최적화를 열어. 종종 각 테이블 항목이 마지막 행이나 마지막 몇 칸에만 의존해 — 그래서 전체 테이블이 메모리에 필요 없고, 그 슬라이딩 윈도우만. 피보나치는 앞 두 값만 필요해, 그래서 전체 O(n) 테이블이 변수 둘, O(1) 공간으로 무너져. O(n×m) 격자가 필요해 보이는 많은 2D DP 가 사실 앞 행만 필요해, 공간을 O(m) 으로 떨궈. '마지막 K 칸에만 의존해' 를 알아보는 게 DP 공간 비용이 극적으로 줄어드는 법 — 매번 찾을 가치 있는 반복 트릭.
메모이제이션이냐 테이블화냐?
같은 답을 계산해; 제약으로 골라. 메모이제이션: 쓰기 쉬움 (재귀 캐시), 지연 (필요한 상태만), 근데 재귀-깊이 제한. 테이블화: 재귀 한계 없음, 종종 더 빠름, 위 공간 최적화 가능, 근데 채우기 순서를 설계해야 하고 모든 상태를 계산. 흔한 작업 흐름: 메모이제이션으로 프로토타입해 점화식을 맞게 하고, 깊이-안전이나 공간 절약이 필요하면 테이블화로 변환. 같은 DP, 상황에 골라.