Graph 迪克斯特拉';s算法不能处理负权重,在现实世界中什么时候会看到负权重?

Graph 迪克斯特拉';s算法不能处理负权重,在现实世界中什么时候会看到负权重?,graph,dijkstra,Graph,Dijkstra,我想不出一个具体的例子,在这个例子中,你的权重是负的。两座房子之间不可能有负距离,也不可能回到过去。什么时候会有一个边权重为负的图 我发现Bellman-Ford算法最初用于处理ARPANET中的路由,但同样,无法想象在哪里会遇到负权重的路由,这似乎是不可能的。我可能想得太多了,举个简单的例子吧?如果你想找到最快的方式在水上公园的一系列相连的水池中游泳,而且它有水槽。在布线时,可能会给链接分配负权重,使其成为默认路径。如果您有一条主线路和一条备用线路,并且出于任何原因不想在它们之间实现负载平衡,

我想不出一个具体的例子,在这个例子中,你的权重是负的。两座房子之间不可能有负距离,也不可能回到过去。什么时候会有一个边权重为负的图


我发现Bellman-Ford算法最初用于处理ARPANET中的路由,但同样,无法想象在哪里会遇到负权重的路由,这似乎是不可能的。我可能想得太多了,举个简单的例子吧?

如果你想找到最快的方式在水上公园的一系列相连的水池中游泳,而且它有水槽。

在布线时,可能会给链接分配负权重,使其成为默认路径。如果您有一条主线路和一条备用线路,并且出于任何原因不想在它们之间实现负载平衡,则可以使用此选项。

即使有示例;你可能会把它正常化,使之成为积极的。负权重的任何实际表示都是相对于0的。我想我想说的是,可能没有一个负权重的应用不能完全使用正权重

编辑:在仔细考虑这一点之后,我想您可能会遇到给定路径具有负权重的情况。在这方面;假设负权重是不好的,那么您将不得不面临这样一种情况,即实现目标的唯一可能方法是到达所需的端点,这意味着您的图形中必须至少有一个点需要您选择负路径(如中所示,没有其他选项可用于实现您的目标)。但是我想如果这个图没有被遍历;你怎么知道这是真的

编辑(再次):@Jim,我想你是对的。瓶颈其实并不重要。我想我很快就认为这是因为在引入负边时,我脑海中突然出现的一个问题是——如果可以在不取任何负边的情况下遍历图形,那么负边首先在那里做什么?但是,这并不能很好地支持,因为——事后诸葛亮之外——你怎么知道一个图在不经过负边的情况下是否能够被遍历呢

同样值得注意的是,根据:

Dijkstra算法由荷兰计算机科学家Edsger Dijkstra于1956年提出,并于1959年发表,是一种图搜索算法,它解决了具有非负边路径代价的图的单源最短路径问题,生成了最短路径树。该算法通常用于布线,并作为其他图形算法的子例程


因此,尽管这次谈话很有用,也很发人深省;也许问题的标题应该是“遍历带负边的图的正确算法是什么?”Djikstra的算法旨在找到最短路径。但是,如果引入正权重和负权重,那么目标不是从寻找最短路径变为寻找最正路径吗?无论所选路径上有多少条边?如果有,你的退出条件是什么?你能知道你已经达到最佳解决方案的唯一方法是,如果你穿过一条包含所有正边而没有任何负边的路径,那么这种情况不是偶然发生的吗?因此,如果引入一种有正权重和负权重的情况,将目标更改为最正(或负权重,取决于你想如何构建它),那么这个问题不是注定是O(n!),因此最好通过决策算法(如alpha/beta)来解决吗如果允许使用的边总数受到限制,那么哪一个会产生最好的结果?

我想,如果您已经有了一个非负权重的系统,并且出现了一条比所有现有路径都便宜的路径,您可能会得到负权重,由于某些原因,重新设置网络的重量是昂贵的。

假设步行一段距离需要一定量的食物。但在某些路径上,你可以采集食物,因此你可以通过沿着这些路径获取食物。

我认为这是一个很好的观点。在这种情况下,负权重实际上并不表示负路径权重。这更像是人们有时将一个值初始化为-1,然后在(foo>=0){bar();}时这样做。我可以看到,如果路径是C实现的话,它会被大量用于将路径设为默认路径。好吧,当你处理路由协议时,你可以设置链接权重(路径权重)来强制协议服从你的意愿。我不知道为什么要将连杆重量设置为负数,但这是可能的。因为w=m*a,如果你在负加速度下,即减速,你会感觉到负重量。或者我把你的问题看得太字面了……是的,如果你去加速或者边缘代表金钱,你可能会有一条消极的路径。这更有意义。我所有的例子都是物理的,然后它们引入了负权重,我没有跳出框框思考。我猜边缘也可能是钱,所以一堆路径赚钱,然后一条路径赔钱;但是,在这种情况下,在使用Dijkstra的方法遍历它之前,难道你不会简单地从考虑中的图中删除所有你赔钱的路径吗?有没有办法找到一个最优的解决方案,其中包括一条你会赔钱的道路?@Dave:当然。负值边可能是通往非常有价值的子图的唯一路径。@Jim-ya。我只是想出来并编辑了我的答案;但是你把我打得落花流水。为什么要限制负边缘是一个瓶颈?考虑从0个点开始,通过图形找到一条路径,从而得到最高的NU。