为Dijkstra算法构建测试图的策略?

时间:2012-03-12 21:26:48

标签: algorithm graph graph-algorithm dijkstra

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

目前,我使用了一种天真的方法。节点在2d空间中的随机位置创建(其中x和y是0和某个MAX_SPACE常量之间的无符号整数)。随机创建边缘以连接节点,以便每个节点具有至少为1(并且最多为MAX_DEGREE)的outdegree。 Indegree未强制执行。然后我搜索集合中第一个和最后一个节点之间的路径,可以连接也可以不连接。

在更现实的情况下,节点在2d空间中具有与其接近度成比例的连接概率。使用该属性构建随机测试图的好策略是什么?

备注

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

应该很容易修改策略以支持以下常量(也许还​​有其他常规 - 如果你想到任何有趣的话,请告诉我):

  • MIN_NODES,MAX_NODES:图表的一系列尺寸
  • CONNECTEDNESS:平均出度
  • 接近:给予优先连接近端节点的权重

1 个答案:

答案 0 :(得分:1)

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

  • Barabasi Albert Generator - 简单的进化无标度随机图生成器。在每个时间步,创建一个新的顶点,并根据"优先附着"的原则连接到现有的顶点,从而具有更高度数的顶点被选择用于附着的概率更高。

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

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

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

对于许多这些发生器,您可以指定大小,因此您可以从小处开始,然后从那里开始。