我正在尝试对我的图表类的dijkstras算法进行测试。为此,我生成一个包含几千个顶点的图形,然后通过随机添加数千条边来连接图形,直到连接图形为止。然后,我可以反复在任意两个随机顶点之间进行搜索,并确保它们之间存在路径。问题是,我经常最终得到一个几乎密集的图形,因为我使用邻接列表表示,导致我的搜索算法非常慢。
问题: 给定一组顶点V,如何生成一个强连通的有向图,其边缘明显少于相同顶点上的密集图?
我在考虑简单地做以下事情:
vertex 1 <--> vertex 2, vertex 2 <--> vertex 3, ..., vertex n-1 <--> vertex n
然后在整个图表中随机添加类似n / 10的边缘,但这似乎不是提出随机图形结构来测试我的搜索算法的最佳方式。
答案 0 :(得分:1)
一种方法是维护一组强连通组件(从|V|
单顶点组件开始),并在每次迭代中,通过连接随机顶点将它们的一些随机子集合并为单个连通组件每一个到下一个的随机顶点,形成一个循环。
这会产生非常稀疏的图形,因此根据您的使用情况,您可能还需要抛出一些额外的随机边缘。
编辑:直觉我认为你在决定在一次迭代中合并多少个组件时想要使用指数分布。但是,我并没有真正的支持。
答案 1 :(得分:1)
我不知道是否有更好的方法,但至少这似乎有效:
我认为这可能有用,虽然拓扑结构不是真正随机的,但它会像一个由连接在一起的较小图形组成的大循环一样循环。但是根据您需要测试的算法,这可能会派上用场。
<强> 编辑: 强>