- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我刚刚阅读了使用双向搜索的最短路径 Dijkstra 算法的 NetworkX 实现(在 this 处)。这个方法的终点是什么?
最佳答案
我将基于 networkx 的实现。
双向 Dijkstra 在两个方向遇到同一个节点时停止——但它在那个点返回的路径可能不是通过那个节点。它正在做额外的计算来跟踪最短路径的最佳候选者。
我将根据您的评论(在 this answer 上)进行解释
Consider this simple graph (with nodes A,B,C,D,E). The edges of this graph and their weights are: "A->B:1","A->C:6","A->D:4","A->E:10","D->C:3","C->E:1". when I use Dijkstra algorithm for this graph in both sides: in forward it finds B after A and then D, in backward it finds C after E and then D. in this point, both sets have same vertex and an intersection. Does this is the termination point or It must be continued? because this answer (A->D->C->E) is incorrect.
"A->B:1","A->C:6","A->D:4","A->E:10","D->C:3","C->E:1"
:它给了我:
(7, ['A', 'C', 'E'])
,而不是
A-D-C-E
。
D
时,它已经收集了一些其他可能更短的“候选”路径。不能保证仅仅因为节点
D
从两个方向到达,最终成为最短路径的一部分。相反,在从两个方向都到达节点时,当前候选最短路径比它继续运行时会找到的任何候选路径都短。
A
或
E
相关联
{} {}
A
放入与
A
关联的集群中
{A:0} {}
A
是否已经在
E
附近的集群中(当前为空)。它不是。接下来,它查看
A
的每个邻居,并检查它们是否在
E
附近的集群中。他们不是。然后它将所有这些邻居放入一个堆(如有序列表)中的
A
即将到来的邻居,按路径长度从
A
排序。将此称为
A
的“边缘”
clusters ..... fringes
{A:0} {} ..... A:[(B,1), (D,4), (C,6), (E,10)]
E:[]
E
。对于
E
它做对称的事情。将
E
放入其簇中。检查
E
是否不在
A
周围的集群中。然后检查它的所有邻居,看看是否有任何在
A
附近的集群中(它们不是)。然后创建
E
的边缘。
clusters fringes
{A:0} {E:0} ..... A:[(B,1), (D,4), (C,6), (E,10)]
E:[(C,1), (A,10)]
A
。它从列表中取出
B
并将其添加到集群
A
附近。它检查
B
的任何邻居是否在
E
周围的集群中(没有邻居要考虑)。所以我们有:
clusters fringes
{A:0, B:1} {E:0} ..... A:[(D,4), (C,6), (E,10)]
E:[(C,1), (A,10)]
E
:我们将
C
添加到
E
的簇中,并检查
C
的任何邻居是否在
A
的簇中。你知道吗,有
A
。所以我们有一个
候选 最短路径 A-C-E,距离为 7。我们会坚持下去。我们添加
D
以添加到
E
的边缘(距离为 4,因为它是 1+3)。我们有:
clusters fringes
{A:0, B:1} {E:0, C:1} ..... A:[(D,4), (C,6), (E,10)]
E:[(D,4), (A,10)]
candidate path: A-C-E, length 7
A
:我们从它的边缘
D
得到下一个东西。我们将它添加到大约
A
的集群中,并注意它的邻居
C
在大约
E
的集群中。所以我们有一个新的候选路径,
A-D-C-E
,但它的长度大于 7 所以我们丢弃它。
clusters fringes
{A:0, B:1, D:4} {E:0, C:1} ..... A:[(C,6), (E,10)]
E:[(D,4), (A,10)]
candidate path: A-C-E, length 7
E
。我们看
D
。它位于
A
附近的集群中。我们可以确定,我们将遇到的任何 future 候选路径的长度至少与我们刚刚追踪的
A-D-C-E
路径一样大(这种说法不一定很明显,但它是这种方法的关键)。所以我们可以停下来。我们返回之前找到的候选路径。
关于python - "Bidirectional Dijkstra"来自 NetworkX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35779969/
我想知道是否有可能拥有 RESTful Web 服务以及与客户端和服务器的双向通信。 在我的情况下,服务器上的状态可能会改变,因此服务器应该向客户端发送一条消息来更新它们自己。也许这完全违背了 RES
我有一个表,我在其中使用复合键作为主键。它创建了类似的东西: CREATE TABLE FOO( BAR1 INT, BAR2 INT, PRIMARY KEY (BAR1, BAR2
我刚刚阅读了使用双向搜索的最短路径 Dijkstra 算法的 NetworkX 实现(在 this 处)。这个方法的终点是什么? 最佳答案 我将基于 networkx 的实现。 双向 Dijkstra
假设我们有一个像 Pug : Dog : Mammal : Animal 这样的类层次结构。 . 我想要一个接受 Bag 的函数(其中 Bag 在 T 中是不变的)作为 Dog 的子或父类(super
我只是想知道 Doctrine 与 Symfony 中双向关系的优点/缺点是什么? 我所有的关系都是双向的,但我不确定这是否会导致问题...... 谢谢。 最佳答案 只要您不将关系标记为EAGER,我
我正在尝试在tensor2tensor中创建一个简单的基于LSTM的RNN。 到目前为止,训练似乎有效,但我无法恢复模型。尝试这样做会抛出 NotFoundError ,指出 LSTM 中的偏差节点:
我正在使用 Hibernate 和 JPA 注释。我有一个单向多对多关联,我打算将其设为双向关联。 数据库已包含一些数据。我正在考虑使用 Liquibase 来更新表。有人可以给我一些关于我必须编写的
想法很简单,但我真的不知道如何解决以下问题。 我想计算圆的周长, U = 2*Math.PI*R 因此,U 是周长,R 是圆的半径。单向解决方案很简单。 HTML 代码看起来像 R: U:
我正在使用 crossrider.com 编写一个可移植的浏览器扩展程序。 我的扩展由前端部分(crossrider:扩展页面范围)和后端部分(crossrider:后台范围)组成。后台在每个浏览器上
我有下面的一对多双向关系。 在使用 symfony2 任务生成 crud 操作后,当我尝试在新建/编辑类别表单中保存与类别关联的产品时,产品未保存... namespace Prueba\Fronte
我对 Fluent NHibernate: How to create one-to-many bidirectional mapping? 有类似的问题但是我对一对一映射的情况很感兴趣。例如 Umb
基本问题:如何在 Fluent NHibernate 中创建双向一对多映射? 详细信息: 我有一个带有许多子对象的父对象。就我而言,子级没有父级是没有意义的,因此在数据库中,我希望父级的外键具有 NO
问题:在Windows 7上,由于我们无法使用nfs(自然,无需黑客),Vagrant/Magento这对夫妇的性能非常差。 经过这么多研究,我发现解决该问题的最好方法(也许是唯一)是使用rsync。
在X引用Y,Y有很多X的情况下如何配置双向映射,这样当我在Y实例中添加很多X并保存Y实例时,它会工作正常吗? 为了让问题更清楚,这里是代码: ClientCompany 模型有HasMany Cont
在gRPC中的双向流设置中,如果一方终止TCP连接,例如,如果服务器突然崩溃并重新启动,客户端如何重新建立连接?我们需要手动处理这个问题吗?或者gRPC本身有解决这种情况的机制吗?。原稿文件:。客户服
我正在使用带有 SP1 的 Delphi XE3。我创建了一个 FireMonkey 桌面应用程序,并在主窗体上放置了 TSpinBox 和 TTrackBar。我现在已经使用 Visual Live
我有一个看起来像这样的 Django 模型(当然是简化的): from django.db import models from polymorphic.models import Polymorph
我想要解决的问题是建立一个稳定的连接,以便在 PC 和我的 Raspberry Pi(RPi) 之间交换数据。它们通过路由器通过 LAN 中的 WLAN 连接。 我创建了一种简单的方法,在每个设备上定
我目前在使用 OneToMany/ManyToOne 映射时遇到问题。映射看起来像这样: public class A implements Serializable { @EmbeddedI
你好,我有一个关于 JPA 的问题...... 数据库: Java 类(省略不相关的字段): 用户: @Entity public class User{ @Id private in
我是一名优秀的程序员,十分优秀!