浅谈动态规划
算法基本思想之动态规划
前言
谈到算法最优解:则首先会想到两个算法第一个是贪心算法,其次才会是动态规划
再者从问题解决规模的相似程度来看,可能会引出另外的一个算法叫做:分治法(更准确的来讲叫做分治思想)
实例问题
有一个问题是:
现在假定学校要从计算机工程系选出本年度的三好学生,假定其名额一共有三个,其中学校计算机工程系的学生分布为:人工智能专业,数字媒体技术专业、网络安全专业、计算机科学与技术专业、软件工程专业。每个专业有两个教学班,每个班级有30人
每个班级有班主任,每个专业有专业负责人,系里有系部副主任,系部主任
自底向上
我们的最终目的是选择本系部学习最好的三名学生,我们从各个班级找出本
班学习最好的三名学生由班主任老师负责提交名额到专业负责人,然后专业负
责人再把本专业老师所接收到的6个名额选出其中的最好的三个人进行提交
到系分管副主任,然后系副主任再把接收到的15名最好的学生再排名,选取
前三个名额,交送到系主任,至此3名三好学生推选完毕
首先是最优化原理:
由上边过程来看,从班级到专业再到系部,每一次推选过程都是从找最好的三个人(最优),每一次的结果都是本次结果的最优化结果
再者是无后效性:
从上边的结果来看不管最后推选的三好学生来自哪个专业或者哪个班,当我们班级推选好之后,其后的评选结果(专业或者副系以及系部)不会再对班级的三好学生名额有任何影响,所以不会受到后边结果的影响
最后是有重叠子问题:
系主任要找三个三好学生一定是来自这10个班级,而系副主任的三个三好学生
也来自这10个班级,而各专业的三个三好学生也是从下属的各个班级中评选出来,所以问题最后还是要回归到班级中评选三个三好学生
**系主任要找三个三好学生一定是来自这10个班级,而系副主任的三个三好学生
也来自这10个班级,而各专业的三个三好学生也是从下属的各个班级中评选出来,所以问题最后还是要回归到班级中评选三个三好学生
当然也可以做
自顶向下的追溯:
系主任要找三个系部最好的三个学生,只要找系副主任要三个就好了,系副主任要三个学习最好的学生,但是目前尚未有选取范围,但是一旦他拿到范围选取其中的最好的三个学生就行了,所以他会找各个专业负责人要三个,各个专业负责人需要提交三个学习最好的名额,但是他们现在也没有拿到名额,只能找班主任老师要三个学习最好的名额,然后在拿到的6个名额选取3个提交,班主任在接到专业负责人要求提交名额的文件后会在班级内选出三个名额(边界条件)
总结
通过以上:自顶向下叫做递归,最后的边界条件叫做递归出口,自底向上叫做递推,总的来讲,低阶问题的结果将会影响到高阶的问题的解,但是高阶的问题解无论是什么,一定不会使低阶问题的解发生改变(这也是动态规划相较于分治思想的最大的优势)