《programming for the puzzled》第16章
涉及到的语言和算法知识:函数作为参数,贪心算法。
贪心算法是在每步都选择局部最优解,希望于能找到全局最优解。在很多问题里贪心算法并不能得到全局最优解。
问题描述:根据课程安排(以一个[a,b)区间列表给出,a,b是一天中的小时数,前闭后开意味着另一门课可以从b开始。),选出最多的课程。
贪心法流程:
①使用一些法则选择一个课程c。
②排除所有与c冲突的课程。
③如果剩余课程集合不为空,重复第一步。
其中第一步有很多方法:
最短时间算法:选剩下的课程中时间最短的。但并不总是有效的。
最早开始算法:选剩下的课程中开始时间最早的,也不是总有效。
最小冲突法:选剩下的课程中与其它课程冲突最少的,还是不行。
最早结束算法:选剩下课程结束时间最早的,可以了。(通过数学归纳法证明的。)
下面上代码
1 | # 《programming for the puzzled》实操 |
不同的选择算法通过函数参数传递给算法。
贪心算法能得到图的最短路径,见第20个问题。
本章代码:本文代码:https://github.com/zwdnet/MyQuant/blob/master/44/16
我发文章的三个地方,欢迎大家在朋友圈等地方分享,欢迎点“在看”。
我的个人博客地址:https://zwdnet.github.io
我的知乎文章地址: https://www.zhihu.com/people/zhao-you-min/posts
我的微信个人订阅号:赵瑜敏的口腔医学学习园地