最近利用工作中的空闲时间,学完了《算法导论》中的动态规划,也算是填补了自己对于复杂算法方面知识的空缺。以下是我对这部分内容的总结。
动态规划主要是用来解决求最优解问题的一种方法,这类问题如果使用常规的方法处理可能会花费极为漫长的时间。而使用动态规划来进行解决的话往往会花费更少的代价。当然这类问题必须满足一定的特点,才能使用动态规划来进行解决。
首先问题应能分解为对其子问题最优解的求解过程。而这些子问题往往和原问题有着十分类似的结构,在这一点上十分类似于递归的求解过程。同时在求解这些子问题过程中往往会包含对以前以求解过的子问题的重复求解。因此如果采用递归算法来进行求解,在求解过程中将会包含大量的对子问题的重复求解过程。而采用动态规划的话将会避免上述对子问题的重复求解。虽然都是把问题分解为子问题去求解,但我个人觉得动态规划与递归算法的最大不同在于递归算法是采用置顶向下的方法去解决问题,而动态规划是采用自底向上的方法来解决问题,采用这种方式可以巧妙的避免对重复子问题的求解