《算法图解》总结第 8 章:贪婪算法( 二 )


输出结果:
F:\anaconda\python.exe E:/lecode/tanlan.py# 代码存储位置,方便自己下次找到states_needed: {'or', 'az', 'ca', 'wa', 'mt'}states_needed: {'or', 'az', 'ca'}states_needed: {'az'}states_needed: set(){'ktwo', 'kone', 'kthree', 'kfive'}
NP完全问题 定义
NP完全问题的简单定义是以难解著称的问题,如集合覆盖问题和旅行商问题,这两个问题的共同之处在于我们需要计算所有的解,并从中选择最小或者最短的那个,感兴趣的同学可以去 了解一下旅行商问题 。这是一类很多聪明人都认为,根本不可能编写出可快速解决这些问题的算法 。
【《算法图解》总结第 8 章:贪婪算法】如何识别NP完全问题
我们为什么会关注到NP完全问题的识别这个问题呢?若我们能识别出一个问题是NP完全问题,那么我们就可以用近似求解的方法去解决这个问题,而不用再去费力去求解完美解了 。尽管我们没有办法判断某个问题是不是NP完全问题,但是还是有一些蛛丝马迹可引导我们做出判断:
(1)元素较少时算法的运行速度非常快,但随着元素数量的增加,速度会变得非常慢;
(2)涉及“所有组合”的问题通常是NP完全问题;
(3)不能将问题分成小问题,必须考虑各种可能的情况,这可能是NP完全问题;
(4)如果问题涉及序列(如旅行商问题中的城市序列)且难以解决,它可能就是NP完全问题;
(5)如果问题涉及集合(如广播台集合)且难以解决,它可能就是NP完全问题;
(6)如果问题可转换为集合覆盖问题或旅行商问题,那它肯定就是NP完全问题 。