动态规划 是一种 多阶段决策过程最优的通用方法
优化原则: 一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列
我的理解是:
假设S3A3B4C4T4(最优化的未知)是最优化的,即是 所有的S中某点 到 所有的T中某点 最短的选择路径
按照优化原则, 即是S3A3B4CT4中任何子序列 是 相对于开始和结束两点中最短的, 比如 A3B4C4是相对于A3C4两点选择路径中最短的,并不是 所有的A中某点 到 所有的C中某点 最短的 比如A3B4C3 比 A3B4C4 短
你为什么不选A3B4C3 却选A3B4C4呢 因为在A3 到 T4中 A3B4C4T4比 A3B4C3T4 短 (这是因果倒置的,这里只是理解,但在实际函数中是由两个点最短到三个点最短一步步得到)
在实际函数中,在这幅图中是分别列出S到A两点间距离最短,在此基础上,分别列出SAB三点间最短路径,即是在SA的基础上,列出B对应的一个或者两个A点中最短的距离加上之前A的距离,最后在ST两点中所有最优路径中找出最短路径
最优路径中任何子序列是相对于子序列的初始和结束状态的最优决策序列,相对于原序列最优
投资问题
在输入每个项目投入和效益产出的数据后,按照 动态规划 的理念,分别求出一个项目投入不同资金的产出.
在此基础上的两个项目的总投入不同资金的产出(在总资金一定时,第一个项目按照之前的一个项目不同投入产出表,再按照数据表中第二个项目投入剩余资金的产出相加后的总产出,在相互比较后,选择出总资金一定后,产出最高的那一个)
在此基础上的三个项目的总投入不同资金的产出(在总资金一定时,前两个项目按照之前的两个项目不同投入产出表,再按照数据表中第三个项目投入剩余资金的产出相加后的总产出,在相互比较后,选择出总资金一定后,产出最高的那一个)
在此基础上,进行第四,五到n个项目,最后根据需要找出,对应数目的项目和资金后的产出表.
代码:https://github.com/zhangweifeng66/algorithms