为什么这些迷宫生成算法会生成具有不同属性的迷宫?

时间:2011-04-05 01:32:54

标签: algorithm random

我正在浏览the Wikipedia entry on maze generation algorithms并发现该文章强烈暗示不同的迷宫生成算法(随机深度优先搜索,随机Kruskal等)会产生具有不同特征的迷宫。这似乎表明算法在所有单解迷宫(在矩形网格上生成树)的集合上产生具有不同概率分布的随机迷宫。

我的问题是:

  1. 这是正确的吗?也就是说,我正确阅读了这篇文章,文章是否正确?
  2. 如果是,为什么?我没有看到不同算法产生不同分布的直观原因。

4 个答案:

答案 0 :(得分:6)

嗯,我认为很明显不同的算法产生不同的迷宫。我们来谈谈网格的生成树。假设您有一个网格G,并且您有两种算法来为网格生成生成树:

算法A:

  1. 选择网格的任何边缘,99%概率选择水平边缘,否则选择垂直边缘
  2. 将边缘添加到迷宫中,除非添加它会创建一个循环
  3. 当每个顶点连接到每个其他顶点(生成树完成)时停止
  4. 算法B:

    1. 作为算法A,但将概率设置为1%而不是99%
    2. “显然”算法A产生具有大量水平通道的迷宫和具有大量垂直通道的算法B迷宫。也就是说,迷宫中水平通道的数量与算法A产生的迷宫之间存在统计相关性。

      当然,维基百科算法之间的差异更为复杂,但原理是相同的。算法以非均匀,结构化的方式为给定网格采样可能的迷宫空间。

      LOL我记得一次科学会议,一位研究人员向她展示了她的算法结果,该算法为“图表”做了一些事情。结果是统计的并且呈现为“随机图”。有人问观众“你从哪个随机图的分布中绘制图表?”答案是:“呃......它们是由我们的图形生成程序生成的”。杜!

答案 1 :(得分:1)

有趣的问题。这是我的随机2c。

将Prim与DFS进行比较,后者似乎具有生成更深树的倾向,这仅仅是因为第一次“运行”有更多空间来创建具有较少分支的深树。另一方面,Prim的算法似乎创建了具有更多分支的树,因为可以在每次迭代时选择任何开放分支。

要问这个的一种方法是查看每个算法产生深度树的概率是多少? N.我有预感他们会有所不同。一个更正式的方法来证明这一点可能是为树的每个部分分配一些权重,并显示它更有可能被采取或尝试以其他方式表征空间,但我会手动波浪并猜测它是正确的: )。我对你认为不会的原因感兴趣,因为我的直觉恰恰相反。不,维基文章没有给出令人信服的论据。

编辑

一种简单的方法来看这个考虑一个带有两个子节点的总体树,总共有k个节点 如,

*---* ... *
 \--* ... *

选择随机节点作为开始和结束。 DFS将生成两个迷宫中的一个,可以是整个树,也可以是从开始到结束的直接路径的一部分。 Prim的算法将产生'迷宫',其中从开始到结束的直接路径具有长度为1 ... k的辅助路径。

答案 2 :(得分:0)

在您要求每个算法生成每个解决方案之前,它不是统计数据。

您认为统计偏差只是偏向首选的第一种解决方案。

这种偏见可能不是算法(集合理论),而是依赖于实现(如快速排序中枢轴选择的偏差)。

答案 3 :(得分:-1)

是的,这是正确的。您可以通过不同方式启动过程来生成不同的迷宫。一些算法以完全闭合的网格开始并移除墙壁以生成穿过迷宫的路径,而一些算法以空网格开始并添加留下路径的墙壁。仅这一点就可以产生不同的结果。