algorithm - "dynamic"编程与 "normal"编程有何不同?

标签 algorithm dynamic-programming

每当我查看计算机竞赛的解决方案时,总会看到“动态规划”一词。我用 Google 搜索了这个术语并阅读了几篇文章,但没有一篇提供编程 VS “动态”编程的简单示例。那么“动态”编程与“普通”编程有何不同呢? (请使用简单的术语!)

最佳答案

Dynamic Programming在与 Linear Programming 一起使用的意义上更多地使用编程 -- 一种解决问题的机制。

我最近读到的一篇描述(但记不起来源——[需要引用])表明通常的方法是 divide and conquer用于 recursion是一种自上而下的解决问题的方法,而动态规划是一种自下而上的解决问题的方法。

维基百科文章建议计算 Fibonocci sequence是动态规划的绝佳使用——你memoize计算结果以在算法中进一步使用,以避免重新计算类似的结果。

Knuth's algorithm for line-breaking paragraphs是动态规划的另一个很好的例子:如果你考虑在每个单词之间插入换行符的可能性(甚至在 inside 单词中,在连字点处换行),感觉就像唯一的算法将是指数级的 - - 或者更糟。但是,通过跟踪与先前换行相关联的“坏处”,Knuth 的算法实际上以输入大小的线性时间 运行。 (我必须承认我并不完全理解 Knuth 的算法——只是它非常聪明。)

关于algorithm - "dynamic"编程与 "normal"编程有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9491097/

相关文章:

algorithm - 快速过滤的数据结构(Delphi)?

java - Redis过期不起作用

c++ - 为什么堆而不是排序容器

c - 采访中询问: Dynamic Programming

python-解决圆 table session (ZCO,2012)

java - 重建图以查找小于初始最短路径的优化图数

algorithm - 有没有一种有效的算法可以做到这一点?

algorithm - 可以给我们最大 'flip-flop' sum 的子列表数组是什么?

language-agnostic - 为什么背包问题是伪多项式?

c++ - O(N ^ 2)时间内的回文分割问题