Dynamic programming

동적 계획법

Store answers to overlapping subproblems to avoid recomputation.

···
html
<div class="v"><header><b>MEMO TABLE</b><span id="state"></span></header><main><div class="cells" id="cells"></div><div class="formula" id="formula"></div></main><footer>each answer computed once</footer></div>
css
.v{width:min(92vw,660px);height:min(86vh,310px);box-sizing:border-box;padding:clamp(9px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);display:flex;flex-direction:column;gap:7px;color:var(--fg);font:500 clamp(15px,4.5vmin,19px)/1.25 var(--font-sans, sans-serif)}.v header,.v footer{display:flex;justify-content:space-between;align-items:center;gap:8px;white-space:nowrap}.v header b{color:var(--accent);font-size:.9em}.v header span,.v footer{color:var(--muted);font-size:.82em}.v main{flex:1;min-height:0;position:relative;overflow:hidden}.v .mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.v .active{background:var(--accent)!important;color:var(--bg)!important;border-color:var(--accent)!important}.v .muted{opacity:.45} .cells{height:57%;display:flex;align-items:center;justify-content:center;gap:4px}.cell{width:32px;height:38px;border:1px solid var(--line);border-radius:5px;display:grid;place-items:center;font:700 .9em ui-monospace,monospace}.formula{text-align:center;color:var(--accent);font:600 .9em ui-monospace,monospace}
js
const f=[0,1,1,2,3,5];let n=2;function draw(){document.getElementById("cells").innerHTML=f.map((x,i)=>"<div class=\"cell "+(i===n?"active":i>n?"muted":"")+"\">"+(i<=n?x:"?")+"</div>").join("");document.getElementById("formula").textContent="F("+n+") = F("+(n-1)+") + F("+(n-2)+")";document.getElementById("state").textContent="cache hit: "+(n-1)+","+(n-2);n=n===5?2:n+1}draw();setInterval(draw,980)

Dynamic programming applies when a larger answer can be built from smaller answers. It stores each subproblem result in a memo or table and reuses it later.

For overlapping recursions such as Fibonacci, this avoids repeated branches. A poor state definition or evaluation order can omit dependencies or waste memory.

When to use

Use it for repeated subproblems in path, sequence, and counting tasks.

Open as page ↗