【算法系列】——重新认识动态规划

来源:互联网 发布:重新激活免费网络通信 编辑:程序博客网 时间:2024/05/21 19:34

    之前学习软考的过程,接触过动态规划的内容,但是通过最近这次的学习发现之前的理解有点偏颇,利用这次机会重新整理一下。

    动态规划:

    是求解决策过程最优化的数学方法,把多阶段过程转换为一系列单阶段问题,利用各阶段之间的关系,逐个求解。

    动态规划的核心:

    1、重复子问题

    2、最优子结构

    保证每个过程都有最优解的最大值

    动态规划运用范围极为广泛,基本上各行各业具有涉及。例如拦截导弹,合唱队形,挖地雷,建学校,剑客决斗等,具体的应用场景见百度百科

            本文主要讲动态规划的思考方式,关于实现会放到下一篇博客中。

    逆向思维,动态通用公式

     

     

     如果只看第三个计算方式,有没有递归的感觉?

    上述内容主要是利用动态规划解决0-1背包问题,上述公式代表在背包容量为w的前提,在i件物品中,组合出最优解的最大价值的物品组合放入背包中。

    在已知最优解的前提下(也就是背包能存放的物品的最大价值已知),通过运算计算得出背包中放入了那几件物品,能得到最优解最大值。解决这个过程前提,物品和背包容量的组合都已经提前计算出来,这就是之前计算的那个表,其实表格解决的问题就是重复子问题,在拆分的过程(可以理解成递归),发现这些组合一直在重复利用,于是利用这个特点,提前计算,存储于计算机中,等需要的时候直接调用即可!

总结

    理解动态规划0-1背包问题,说一万遍,也不如在感觉理解之后,先把动态规划的计算式展开,理解重复子问题的过程,然后按照思路计算一下表格的数据,理解最优子结构问题,相信在这个过程之后,对动态规划有深入的认识!下篇文章在讨论代码的实现过程!

    

原创粉丝点击