NP问题以及一些相关知识
发布日期:2021-05-08 01:40:36 浏览次数:13 分类:精选文章

本文共 668 字,大约阅读时间需要 2 分钟。

之前介绍过BFS,BFS可以用来找出所用段数最少的路径。但是,如果路径有权值,想要找出最快路径,据需要用到迪杰斯特拉算法,该算法找出的是总权重最小的路径。

即:如果要计算非加权图的最短路径,可以使用广度优先遍历;要计算加权图的最短路径,可以使用迪杰斯特拉算法

但是,有一点需要注意,迪杰斯特拉算法只适用于正权重的有向无环图。如果有负权边,可以使用贝尔曼-福德算法。

 

贪心算法:每步都选择局部最优解,最终得到的就是全局最优解的方法就是贪心算法。

NP问题:如旅行商问题和集合覆盖问题。NP问题的求解需要我们计算出所有的解,并且从中选出最小/最短的那个,这样的问题就属于NP问题。

但是因为时间复杂度,NP问题往往难以找到最优解,我们往往使用贪心算法来获取近似最优解。

NP问题的判断:

并没有一个准确的办法判断一个问题是不是NP问题,但是针对NP问题的一些特征,还是有迹可循的。

1、元素较少时算法的运行速度非常快,但是随着元素数量的增加,速度会变得非常慢。

2、涉及“所有组合”的问题通常是NP完全问题

3、不能将问题分解成小问题,必须考虑各种可能的情况。

4、如果涉及序列(如旅行商问题中的城市序列)且难以解决,它可能就是NP完全问题。

5、如果问题涉及集合(如广播台集合)且难以解决,它可能就是NP完全问题。

6、如果问题可以转化为集合覆盖问题或者旅行商问题,那它肯定就是NP完全问题。

 

另:对于NP完全问题,还没有找到快速解决方案。

面临NP完全问题,最佳的做法是使用近似算法。

贪心算法易于实现,运行速度快,是不错的近似算法。

 

上一篇:五大常用算法之三:贪心算法(最详细全面的讲解)
下一篇:BFS(广度优先搜索来啦)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月06日 10时08分47秒