1.贪婪算法:
每一步都采用当前局部的(这里是重点)最优的做法,最终得到全局最优解;这是一种完美算法,要找到最优的结果
贪婪算法与动态规划的区别:
这两种算法都是选择性算法,就是从一个候选集合中选择适当的元素加入解集合。
贪心算法的选择策略即贪心选择策略,通过对候选解按照一定的规则进行排序,然后就可以按照这个排好的顺序进行选择了,选择过程中仅需确定当前元素是否要选取,与后面的元素是什么没有关系。
动态规划的选择策略是试探性的,每一步要试探所有的可行解并将结果保存起来,最后通过回溯的方法确定最优解,其试探策略称为决策过程。
从背包问题看两种算法的区别:
贪婪算法:选择当前最优的选择就是拿最贵的,但这从全局来看不是最优的选择,但这就是贪婪算法
动态规划:从全局考虑选出最优的方案,那总价最贵的及背包最大容量
2.集合覆盖问题:
近似算法(贪婪算法在有些问题上也是近似算法):
是一种大致解决问题的算法,它是以一种简单容易的方式来实现,但它的结果不是最优的,只是接近于最优
3.集合问题的实现代码
主要知识点:
a.集合 set()
b.集合的并集 | (合并)
c.集合的交集 & (重合的相同的)
d.集合的差集 - (从前面的集合里减去跟后面集合中相同的项)
e.实现代码
4.NP完全问题
以难解著称的问题
集合问题及旅行商问题都属于NP完全问题
5.NP完全问题的特点
a.数据少时运算速度快,随着数据的增加,速度变的特别慢
b.涉及所有组合的问题
c.复杂难以解决的问题