【问题标题】:Strategy to build test graphs for Dijkstra's algorithm?为 Dijkstra 算法构建测试图的策略?
【发布时间】:2012-03-29 07:45:48
【问题描述】:

我最近实现了 Dijkstra 的算法来练习 Java。我现在正在考虑如何构建随机测试图(具有单向边)。

目前,我使用一种幼稚的方法。节点在 2d 空间中的随机位置创建(其中 x 和 y 是介于 0 和某个 MAX_SPACE 常数之间的无符号整数)。边是随机创建的以连接节点,因此每个节点的出度至少为 1(最多为 MAX_DEGREE)。不强制执行入度。然后我搜索集合中第一个和最后一个节点之间的路径,该路径可能连接也可能不连接。

在更现实的情况下,节点连接的概率与它们在二维空间中的接近程度成正比。使用该属性构建随机测试图的好策略是什么?

注意事项

我将主要使用它来构建可以手动绘制和验证的图形,但要考虑缩放到更大的图形。

应该轻松修改策略以支持以下常量(可能还有其他常量——如果您想到任何有趣的常量,请告诉我):

  • MIN_NODES、MAX_NODES:图表的大小范围
  • 连接性:平均出度
  • PROXIMITY:优先考虑连接近端节点的权重

【问题讨论】:

  • 也许GTgraph 工具对你有帮助。它被用于在最短路径挑战中生成图形。我还找到了this 视频。
  • @MadChuckle:这两个看起来都很有希望。谢谢!
  • @amit:是的,因为集群是许多现实情况的特征。但我不希望任何答案包含所有特性。

标签: algorithm graph graph-algorithm dijkstra


【解决方案1】:

您可以从查看JUNG(Java 库)中可用的不同随机图生成器开始:

  • Barabasi Albert Generator - 简单进化的无标度随机图生成器。在每个时间步,都会创建一个新的顶点,并按照“优先附着”的原则与已有的顶点连接,度数越高的顶点被选中附着的概率越高。

  • Eppstein Power Law Generator - 生成具有幂律度分布的无向图的图生成器。

还有各种其他生成器可用于 - See Listing Here

对于 python,NetworkX 库还提供了许多图形生成器 - Listed Here

使用其中许多生成器,您可以指定大小,这样您就可以从小处着手。

【讨论】:

  • 这里的所有链接都坏了。
  • 感谢您告诉我@SimonFeatherstone。现在应该都修好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多