你不知道的:贪婪算法

  贪婪算法是关注局部最优而非全局最优的算法策略,在对问题求解时,每次选择,都是当前最佳。当找出一个大致能解决问题的优秀解,而不需要要找出最完美的解的情况下,贪婪算法还是不错的。优秀和完美之间,需要考虑实现代价。例如:精确算法的时间复杂度是冥函数或阶乘函数,其实现代价将远远高于结果还不错的贪婪算法

数据量精确算法贪婪算法
时间复杂度O(2N)O(N2)
53.2秒2.5秒
10102.4秒10秒
3213.6年102.4秒
1004x102116.67分钟

  NP完全问题:不能在确定的多项式时间内解决的问题,为NP完全问题,例如:集合覆盖问题、旅行商问题(经由几个点的最短路径)、所有涉及排列组合的问题。NP完全问题,在数据量少的时候,还可求解;在数据量大的时候,求解时间不可控,速度非常慢;遇到NP完全问题,直接放弃求最优解,直接用贪婪算法求近似解即可。


集合覆盖/排列组合问题计算公式参考:

  • 有序为排列,Permutation,解决从N个物体中有序选出K个物体的所有可能性,P(N,K) = N!/(N-K)!,例如:给8个人发金银铜三个奖牌,有几种发放方法,金银铜是有序的,所以P(8,3) = 336
  • 无序为组合,Combination,解决从N个物体中选出K个物体的所有组合,K个物体的顺序可能为:K!,所以:C(N,K)=P(N,K)/K!,例如:给8个人发三杯水,有几种发放方法,每杯水是一样,所以C(8,3) = P(8,3)/3! = 56
  • N个物体的任意组合为2N,3种物体任意组合的可能性为8,4种物体任意组合的可能性为16。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值