python算法--贪婪算法

今天,我们来学习python五大算法之一的----贪婪算法

基本介绍:

贪婪算法也叫贪心算法,指在解决问题时,先做出当前看来的最优选择,不从整体最优上加以考虑,算法得到的是某种意义上的局部最优解

对所采用的贪心策略一定要仔细分析其是否满足无后效性

贪婪算法的基本思路:
建立数学模型来描述问题
把求解的问题分成若干个子问题
对每个子问题求解,得到子问题的局部最优解
把子问题的解局部最优解合成原来问题的一个解

该算法存在的问题:
不能保证求得的最后解是最佳的
不能用来求最大值或最小值的问题
只能求满足某些约束条件的可行解的范围

教室调度的问题:

在这里插入图片描述
在上课时间不冲突的情况下,怎样安排才会更加多的安排课程呢?
1.选出结束最早的课,它就是要在这间教室上的第一堂课
2.接下来,必须选择第一堂课结束后才开始的课。同样,你选择结束最早的课,这将是要在这间教室上的第二堂课
一直进行重复就会找到最终的答案
在这里插入图片描述
在有些的情况下,贪婪算法可能不会找到最优解,但是非常接近,有时候只需要找到一个能大致解决问题的算法就可以了

集合

集合类似于列表,只是不能包含重复的元素
并集意味着将集合合并交集意味着找出两个集合中都有的元素
差集意味着将从一个集合中剔除出现在另一个集合中的元素

NP完全问题

1.元素较少时算法的运行速度非常快,但随着元素数量的增加,速度会变得非常慢
2.涉及“所有组合”的问题通常是NP完全问题
3.不能将问题分成小问题,必须考虑各种可能的情况。这可能是NP完全问题
4.如果问题涉及序列(如旅行商问题中的城市序列)且难以解决,它可能就是NP完全问题
5.如果问题涉及集合(如广播台集合)且难以解决,它可能就是NP完全问题
6.如果问题可转换为集合覆盖问题或旅行商问题,那它肯定是NP完全问题

猜你喜欢

转载自blog.csdn.net/Layfolk_XK/article/details/108490468