微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据点之间的距离计算图形

如何解决根据点之间的距离计算图形

我有一组地理点(纬度,经度),我想计算一个有向图,其中:

  • 节点就是那些点
  • 如果 X 间的最快路径,则存在
  • X-> Y (在节点 X Y 之间) >和 Y 不会通过另一个节点 Z

我能够计算任何一对节点之间路径的持续时间。 现在,我正在执行以下操作:

  1. 计算每对节点之间的持续时间
  2. 对于每对结点 X Y ,如果存在,则在 X Y 之间存在一条边不是节点 Z ,因此 X -> Z 的持续时间 Z -> Y X -> Y 的持续时间相同。

我已经针对节点的一个子集测试了这种方法,并且似乎可行,但是由于我有大约2000个节点,并且节点之间的持续时间的计算在计算上是昂贵的(因为它涉及到计算最短路径),所以我会想知道是否有更好的方法

一些其他(可能不相关)的信息:

任何帮助将不胜感激

解决方法

我将从运行Delaunay三角剖分开始,这将使您大致了解路径结构(理论上)的样子(理论上)。从理论上讲,一旦完成了Delaunary三角剖分,就很容易找到最短的路径。但是实际上,您使用的是道路网络,而不是点对点的距离,因此您必须挑战这些假设。

  1. 首先构建给出Delaunay三角剖分的方法。下面是三角剖分的示例。假设HJG点位于市中心内,而其周围的点则是围绕它的高速公路。以65英里/小时左右的速度限制说。这意味着从ABCG出发可能比AHG更快。

  2. 对于Delaunay三角剖分中的每个边。确定两个方向上边缘的持续时间。这将为您提供初始权重(如果您可以确定AH的最短路径实际上是ABH,则它也可能会影响三角剖分)。如果没有办法走更快的路线。 ABCG比AHG示例要快。然后您可能已经完成了。如果不是这样,您将不得不尝试收缩边缘,这取决于您的数据,可能仍然需要进行所有路由,因为您不能真正确定某些晦涩的路径是否会使它更快。可悲的是,三角剖分不能解释边缘之间的速度差异。

enter image description here

  1. 如果您可以对其进行设置以告知它确实经过了哪一点,那么您可以避免在所有路径上运行它。 IE:如果您可以说它告诉您最快的路径自动对焦,并且说它使用了AHGF,那么您可以合理地确定AHG和HGF是AG和HF之间的最短路径,而您无需运行这些路径。但是,如果您发现AF实际上采用了ABCEF,那么路线之间显然存在很大的速度差异,并且您还应该检查到达AG的最快路线,以确保它实际上是AHG。每当找到更快的边时,请确保添加到三角剖分中。您实际上可能能够添加多个边缘。基本上,这里的想法是,三角剖分让您了解了在速度无关紧要的情况下最快的路线应该是什么。但是,您需要确认或拒绝该假设。基本上每个节点。通过BFS查找到所有点的最短路径。沿着最长的路径进行探索。

  2. 为帮助执行#3,可能会有助于图形中边缘的顶点路径覆盖。创建从每个点到所有最远点的路径,直到覆盖所有点。 IE:ABCD ABCE AHGF AHJKL AIK(也是相反的顺序,因为它是定向的)。然后,您可以从AD,AE,AF,AL和AK运行最短路径。如果这些路径与期望的路径匹配,那么您就完成了。如果不是这样,您将按照上面#3所使用的方法来完善操作。不过,最糟糕的情况是,我不确定有没有一种方法可以比理论上所有最短路径都快得多的方法,这种方法大约是O(VE)。

  3. 理论上,#4要求从每个顶点开始。但是,如果连接路径作为最短路径有效,则可以跳过顶点,因此,我可能建议您开始检查边数最少(未经验证?)的顶点。再次重申,您可能需要对所有节点进行处理,以确保100%确保只有最短的边缘连接每个节点。

  4. 对于测试,我建议您这样做:随机选择说2000点中的10-200。在10-200点上运行算法。然后在这些点上运行所有路径。如果他们不同意,请仔细研究为什么他们不同意。随时在您的答案和评论中添加任何“例外”案例。重复很多次,看看是否有分歧。注意所有分歧。如果没有分歧,请尝试在整个2000点集上运行。我强烈建议在第2步之后进行此测试。根据您的数据集,Delaunay图有可能非常接近最佳值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。