Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中迷宫生成算法的随机性_C_Algorithm_Debugging_Random_Maze - Fatal编程技术网

C语言中迷宫生成算法的随机性

C语言中迷宫生成算法的随机性,c,algorithm,debugging,random,maze,C,Algorithm,Debugging,Random,Maze,这关系到我只能猜测的是某人用来生成随机迷宫的代码中的一个缺陷。有点长,但大部分是注释掉的选项和/或与随机化无关 我从链接dllu获得2001x2001迷宫,并保存为png。由此,我创造了。为了得到蓝色的图案,我从迷宫的左下角开始填充死胡同。根据他使用的回溯算法,这是迷宫开始生成的点:因此,如果你沿着由此产生的死胡同轨迹,你可以系统地填充迷宫那一侧的所有死胡同。换句话说,中央蓝色体量表示从左下角到唯一边界像素2678 x 1086处的总可访问区域 但有一点很不寻常,蓝色分形似乎在重复。事实上,你可

这关系到我只能猜测的是某人用来生成随机迷宫的代码中的一个缺陷。有点长,但大部分是注释掉的选项和/或与随机化无关

我从链接dllu获得2001x2001迷宫,并保存为png。由此,我创造了。为了得到蓝色的图案,我从迷宫的左下角开始填充死胡同。根据他使用的回溯算法,这是迷宫开始生成的点:因此,如果你沿着由此产生的死胡同轨迹,你可以系统地填充迷宫那一侧的所有死胡同。换句话说,中央蓝色体量表示从左下角到唯一边界像素2678 x 1086处的总可访问区域

但有一点很不寻常,蓝色分形似乎在重复。事实上,你可以看到形状是完全一致的。这个叠加图中的另一个异常将一个大陆的一部分映射到另一个。显然,这些并不是唯一的自动通信

但除了死端构件的形状外,放大时还会重复墙的实际图案。最奇怪的是,这种重复并不准确,但可能只有50-60%的墙对应。区域的缩放和收缩样本:


长问题短,代码中的什么导致了这种模糊的随机性缺失?

标准库函数rand的实现通常非常糟糕,而您的代码执行rand%4,这加剧了问题,因为糟糕的实现往往在较低的位具有更少的随机性。尝试用不同的随机数生成器替换rand。

标准库函数rand的实现通常非常糟糕,您的代码执行rand%4,这会加剧问题,因为较差的实现往往会在较低的位上产生更少的随机性。尝试用不同的随机数生成器替换rand。

Anonymous正确地指出rand的实现很差,并且它的低位熵很差

为了缓解这个问题,您可以使用一个更强大的伪随机数生成器,比如一个适合加密方法的生成器;然而,随机性的质量越高,随机数生成函数中的时间越长


我最初会尝试从你的随机生成器中提取一些高级位。用一个不太完美的随机生成器来改善结果可能就足够了。由于它们是从结果的不同区域提取出来的,并转移到您需要的0-3值,它们的分布应该不同,并且希望更随机一点。

Anonymous已经正确地表明rand的实现很差,它的低位熵很差

为了缓解这个问题,您可以使用一个更强大的伪随机数生成器,比如一个适合加密方法的生成器;然而,随机性的质量越高,随机数生成函数中的时间越长


我最初会尝试从你的随机生成器中提取一些高级位。用一个不太完美的随机生成器来改善结果可能就足够了。由于它们是从结果的不同区域提取出来的,并转移到您需要的0-3值,因此它们的分布应该不同,希望更随机一些

有很多方法可以消除随机性。但首先,你知道真正的随机性是什么样子吗?我想有几种具体的定义可以使用,但我认为其中任何一种都可以排除这些分形中涉及的精确对应的极端巧合,除非我彻底误解了手头的概率。有很多方法可以破坏随机性。但首先,你知道真正的随机性是什么样子吗?我想有几种具体的定义可以使用,但我认为其中任何一种都可以排除这些分形中涉及的精确对应的极端巧合,除非我彻底误解了手头的概率。