动态设计(Dynamic Programming)是盘算机科学中的一个重要算法头脑,其经常用于解决一些庞大的优化问题。
它最早由理查德·贝尔曼在1953年发现,用于解决运筹学中的最短路径问题。之后,它被普遍应用于许多领域,如经济、物理、工程和盘算机科学等。
动态设计最基本的头脑是将庞大问题拆分成一系列子问题。通过递归求解每一个子问题,获得最终问题的解。
动态设计算法的焦点在于对每个子问题的解举行影象化,以制止重复盘算。这也是动态设计和分治算法的区别所在。
动态设计算法的时间庞大度通常是O(N^2)或O(N^3),但在一些特定情形下,也可以做到O(N)的时间庞大度,是解决现实问题中极为有用的算法。