수학 개념 지도
알고리즘(Algorithm)

동적 계획법(Dynamic programming)

겹치는 작은 문제의 답을 표에 적어 두고 다시 쓰는 방법. 편집 거리⁠(edit distance)⁠, 최단 경로⁠(shortest path)⁠, 배낭 문제⁠(knapsack problem)⁠가 이 방법으로 풀린다.

N(x,y)=N(x−1, y)+N(x, y−1),N(0,0)=1N(x, y) = N(x-1,\ y) + N(x,\ y-1), \qquad N(0, 0) = 1
먼저 보면 좋은 개념재귀점화식

재귀⁠(recursion)⁠로 문제를 작은 문제로 쪼개다 보면 같은 작은 문제가 여러 번 다시 나오는 일이 많습니다. 피보나치 수 F30F_{30}을 정의대로 재귀 호출하면 F28F_{28}은 두 번, F27F_{27}은 세 번 불리는 식으로 불어나, 호출이 모두 이백만 번을 넘습니다. 동적 계획법은 작은 문제의 답을 표에 적어 두고, 다시 필요하면 계산하지 않고 표에서 읽습니다. 그러면 작은 문제마다 한 번씩만 풀면 되니, 일의 양은 서로 다른 작은 문제의 수에 한 문제를 푸는 일을 곱한 만큼입니다.

FnF_n, n=n = : 정의대로 재귀하면 번 호출하지만, 표에 적어 두면 F0F_0부터 FnF_n까지 칸만 채우면 됩니다.

격자의 왼쪽 아래 칸에서 오른쪽 위 칸까지, 오른쪽이나 위로만 한 칸씩 가는 길은 몇 가지일까요? 어떤 칸에 이르는 길은 모두 그 칸의 왼쪽 칸이나 아래 칸을 거쳐 옵니다. 그러니 그 칸의 수는 왼쪽 칸의 수와 아래 칸의 수의 합입니다(위의 식). 막힌 칸이 없으면 이 표는 비스듬히 누운 파스칼의 삼각형⁠(Pascal's triangle)⁠이고, 답은 이항계수⁠(binomial coefficient)⁠ (104)=210\binom{10}{4} = 210입니다.

칸을 누르면 막히거나 다시 열립니다. 채운 칸에 마우스를 올리면 그 수가 어떻게 나왔는지 보입니다. 막힌 칸 치우기

칸 안의 수는 왼쪽 아래 출발 칸에서 그 칸까지 가는 길의 수입니다. 노란 칸을 채울 때 청록 칸들의 수를 더합니다.

여기에 동적 계획법의 두 조건이 다 들어 있습니다. 첫째, 큰 문제의 답이 작은 문제들의 답으로 정해집니다. 가장 좋은 답을 찾는 문제에서는 이것을 '최적 부분 구조⁠(optimal substructure)⁠'라 부릅니다. 둘째, 작은 문제들이 여러 큰 문제에 겹쳐 쓰입니다(겹치는 부분 문제⁠, overlapping subproblems⁠). 필요한 칸이 늘 먼저 채워지도록 순서만 잘 정하면 칸 하나에 덧셈 한 번으로 끝납니다. 막힌 칸이 없을 때 길 210가지를 하나하나 따라가는 대신, 표는 35칸이면 됩니다. 1950년대에 미국의 수학자 리처드 벨먼이 이 방법에 이름을 붙이고 체계를 세웠습니다.

이어지는 곳. 두 문자열의 편집 거리는 두 낱말의 앞부분끼리의 거리를 표에 채워 구하고, 최단 경로는 '가장 짧은 길의 일부도 가장 짧은 길'이라는 같은 원리 위에 서 있습니다. 관측된 소리나 낱말들 뒤에 숨은 상태들의 가장 그럴듯한 줄을 찾는 은닉 마르코프 모델⁠(hidden Markov model)⁠의 비터비 알고리즘(1967년 앤드루 비터비), 무게 제한 안에서 가장 값진 물건을 고르는 배낭 문제(무게가 정수⁠(integer)⁠이면 물건 수 × 무게 한도 크기의 표로 풉니다), 분할수⁠(partition number)⁠를 세는 표도 모두 동적 계획법입니다. 분할 정복⁠(divide and conquer)⁠과 달리 하위 문제가 겹칠 때 쓰고, 매 순간 하나만 고르는 욕심쟁이 알고리즘⁠(greedy algorithm)⁠이 틀리는 문제도 모든 작은 문제의 답을 표에 담아 바르게 풉니다. 벨먼의 '최적 경로의 뒷부분도 최적'이라는 원리를 확률⁠(probability)⁠로 움직이는 세계에 쓴 식이 강화 학습⁠(reinforcement learning)⁠의 벨먼 방정식이고, 그 해를 구하는 가치 반복⁠(value iteration)⁠은 표를 되풀이해 고쳐 채우는 동적 계획법입니다. 최단 경로의 표를 채우는 식 min⁡b (dab+dbc)\min_b\,(d_{ab} + d_{bc})는 행렬의 곱⁠(matrix multiplication)⁠에서 합을 최솟값으로, 곱을 덧셈으로 바꾼 (min, +) 곱이고, 다 채운 거리표가 이 곱을 해도 더는 바뀌지 않는다는 것이 곧 삼각부등식입니다. 삼각부등식⁠(triangle inequality)⁠을 화살표의 합성으로 읽는 풍부화된 범주⁠(enriched category)⁠에서 보면, 이 동적 계획법은 도로 지도가 자유롭게 생성하는 '거리의 범주⁠(category)⁠'를 계산하는 일입니다.

관련된 시대와 장소벨 연구소
이 개념이 나오는 큰 생각가장 좋은 것 고르기

이 개념이 나오는 긴 글

거리와 유사도 까마귀와 택시 까마귀는 곧장 날고 택시는 블록을 돌아간다. '얼마나 먼가'에는 답이 하나가 아니고, 어떤 거리를 고르느냐가 통계와 기계 학습의 답을 바꾼다. 계산언어학 말을 세는 기계 문법은 규칙일까, 확률일까? 파니니의 문법에서 촘스키의 위계, 섀넌의 영어 엔트로피, 오늘날의 언어 모델까지. 조합론 세지 않고 세기 시의 운율을 세던 인도의 운율학자부터 오일러의 생성함수까지. 하나하나 늘어놓지 않고 경우의 수를 세는 법은 어떻게 자라났을까? 램지 이론 완전한 무질서는 없다 여섯 명이 모이면 서로 아는 세 사람이나 서로 모르는 세 사람이 반드시 있다. 충분히 크면 어디에나 질서가 숨어 있다는 이론과, 그것을 동전 던지기로 증명한 에르되시. 통신과 잡음 잡음 너머로 대서양 바닥의 케이블은 왜 신호를 뭉갰을까? 잡음이 있어도 오류 없이 보낼 수 있다는 섀넌의 정리와, 그 한계를 50년 동안 쫓은 부호들. 신경망과 기계 학습 배우는 기계 예를 보여 주면 규칙을 스스로 찾는 기계. 1958년의 퍼셉트론에서 오늘의 심층 신경망까지, 그 밑바닥에는 미분과 연쇄법칙이 있다. 게임과 증명 이기는 쪽이 존재한다 "이 판은 백이 이겼다"는 흑이 어떻게 두든 백에게 답이 있다는 말이다. 체스의 체르멜로 정리, ε–δ, 님의 이진법, 폰 노이만의 최소최대와 쌍대성, 논리의 한계를 재는 게임, 끝나지 않는 게임과 선택공리, 대화로 읽는 증명, 겨루며 배우는 신경망까지. 수학의 참을 두 사람의 게임으로 읽는다. 반환과 동적 계획법 같은 계산, 다른 덧셈 가장 짧은 길, 길의 가짓수, 가장 그럴듯한 해석, 갈 수 있는지 없는지. 따로 태어난 알고리즘들이 사실은 한 계산이고, 달라지는 것은 더하기와 곱하기 자리에 무엇을 넣느냐뿐이다. 그렇게 바꿔 넣어도 되는 까닭은 분배법칙 하나다.

이 개념 위에 세워진 것

이 개념을 언급하는 페이지

이 페이지가 가리키는 개념