【问题标题】:Finding nodes in the perimeter of a circle, within the radius of a node in networkx graph在networkx图中的节点半径内查找圆的周长中的节点
【发布时间】:2021-12-09 03:39:58
【问题描述】:

我想在一个节点半径内标记道路网络中的一个区域。然后我想知道位于外围的节点。简单来说,就是想知道自己什么时候进入了圈出来的区域。

我已经使用 networkx 生成了一个子图,但我仍然无法弄清楚如何在外围找到节点。

【问题讨论】:

  • 你知道每个节点的位置吗?计算从中心节点到每个节点的距离。找到从中心到比半径更远的节点连接小于半径的节点的所有边。这些边必须穿过周边。
  • 对于像芝加哥这样的大型网络来说,计算成本很高。如果我有一种方法可以找到周边的节点,那就太好了。我必须对算法中的多个节点执行相同的操作。谢谢你的回答。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python graph networkx


【解决方案1】:

你有多少个节点?如果有数万个或更多,那么在每个节点中搜索正确距离的节点将会很慢,尤其是如果您使用的是解释性语言,例如 python。

您将需要一些方法来快速排除“明显”太远而无法检查的节点。如果您的半径是节点位置范围的小 (

执行此操作的常用方法是使用四叉树。 https://en.wikipedia.org/wiki/Quadtree

比较四叉树和通过点向量的简单搜索在查找点的邻居方面的性能。如果要搜索的点少于 100,则性能相似,每次搜索不到一微秒。对于超过 100 个点,四叉树的优势变得显着。

C++ xode 位于https://github.com/JamesBremner/quadtree

我已使用此代码将最近的乘客分配到伦敦(英格兰)餐厅的外卖配送公司。该应用程序为 5,000 家餐厅堆叠订单(调度算法)、分配司机(四叉树)并计算司机的送货路线(旅行商算法),在所有数据可用后 3 秒内生成 20,000 个订单。

【讨论】:

  • 对不起,如果我的解释不清楚。我需要找到从源到目的地的最短路径。要求是路径需要经过单个节点的半径。但是源和目的地可以位于半径之外。我打算获取原始最短路径,然后找到到达该区域周边的节点。所以我正在寻找一种方法来找到周边的节点。算法的其余部分已经优化。非常感谢您的回答。
  • 你还没有回答我的问题!你有多少个节点?
  • 100000 个节点是目标。目前正在处理 12000
  • 好的,在这种情况下,我强烈建议使用四叉树来过滤掉不需要考虑的节点。
  • 正如我所说,我正在使用压缩数据库来处理网络。但是对于单个区域是从 networkx 子图生成的。我一直在寻找一种在外围查找节点的方法。我暂时不打算更改数据结构。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多