【问题标题】:Compute shortest distance from a given vertex to a vertex with a defined property计算从给定顶点到具有定义属性的顶点的最短距离
【发布时间】:2019-07-11 20:14:41
【问题描述】:

图论中一个很好理解的问题是计算两个顶点之间的最短距离。

我想要做的是找到从给定顶点到具有特定属性值的 最近 顶点的最短距离(确切的顶点是未知的)。

例如,找到从V(1) 到最近的顶点V(?) 的最短距离,其中V(?).property(color)==red

我之前为此使用过的一种方法是从焦点顶点迭代地向外走,沿途询问每个看不见的邻居是否有color=red

我还限制了向外步数的上限以提高效率,即将搜索限制在 k 步邻域

  1. 有没有更好的方法来解决这个问题?
  2. 如何使用 Gremlin 进行编码? (我主要使用 Python 编写代码,不确定如何迁移算法)

【问题讨论】:

  • 这可能不是一个理论不足的问题,只是我的谷歌搜索不够好。

标签: graph graph-algorithm gremlin gremlin-server


【解决方案1】:

正如您所说,这是图论中的一个众所周知的问题,并且有许多算法,例如:Dijkstra's,可以解决这个问题。你可以阅读他们here

您还可以找到许多 gremlin 食谱 here,包括一个简单的最短路径算法。

通过改变循环停止条件,我相信它会给你想要的结果:

g.V(1).repeat(out().simplePath()).until(has('color', 'red')).path().limit(1)

【讨论】:

  • 这真的很好很优雅,谢谢!作为扩展,有没有办法同时遍历向外和向内的边缘? (即假设运行此查询时图形是无向的)
  • 感谢 noam,感谢您的帮助
  • 另请注意shortestPath() 进入较新版本的 Gremlin:tinkerpop.apache.org/docs/current/reference/#shortestpath-step
  • 抱歉打扰了,但最后一个问题:你知道我可以如何修改上面的查询以传递多个顶点吗?例如,g.V(),而不是 g.V(1)。我可以简单地取出限制语句,但它会为同一个焦点顶点计算多条路径。理想情况下,我希望限制为 1,但 对于每个 g.V() 中的顶点。
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多