algorithm - 随机优先搜索?

标签 algorithm random graph depth-first-search breadth-first-search

遍历图的两种最常见的方法是 breadth-first searchdepth-first search 。这两种搜索算法都遵循一个通用模板:

  • 创建一个工作列表 W,以起始节点 s 为种子。
  • 虽然工作列表不为空:
    • 删除工作列表的第一个元素;称它为v。
    • 如果 v 未被访问:
      • 将 v 标记为已访问。
      • 对于每个直接连接到 v 的节点 u,将 u 添加到 W。

在广度优先搜索中,工作列表 W 被实现为 FIFO queue ,而在深度优先搜索中它是 LIFO stack 。如果 W 是 priority queue ,你得到 uniform-cost search

不久前我问过 a question about a data structure for choosing random elements out of a bag 。如果您使用这个随机包实现上述工作列表 W,那么您将获得一个“随机优先搜索”算法,该算法从初始节点开始随机探索图中的节点。

我的问题是:是否有任何已知算法使用这种类型的搜索?也就是说,是否有通过以这种方式生成图的随机生成树来工作的算法? p>

最佳答案

自动拼图生成是一种应用,其中随机优先搜索是一种有用的策略。

假设您希望生成类似 Sudoku 的组合谜题实例.一种方法是生成一个随机的、完全求解的实例,然后在仍然存在唯一解的情况下删除数字。你如何首先生成那个随机解决的实例?您从一个空网格开始,然后应用随机优先 求解算法。事实上,事实证明,通过在随机优先最佳优先策略之间切换来选择下一个数字,使用相同的代码生成和解决方案是相当容易的去尝试。

这正是我们在编写 Nintendo DS 游戏 Zendoku 时所做的,我写了 a detailed article about our approach .

另见 this answer讨论使用随机生成迷宫 Prim's algorithm .

关于algorithm - 随机优先搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8885920/

相关文章:

c++ - 用于获取 vector 元素的所有组合的递归与位掩码

javascript - 你如何防止 javascript 中的 Math.random() 多次选择相同的数字?

algorithm - 最大流图算法

mysql - 如何随机排序数据

ios - SKSpriteNode 在随机路径上的平滑运动

graph - Dijkstra 算法找到所有可能的最短路径

c++ - 如何使用 Boost.Graph 从特定节点遍历图分支?

python - 给定一个数组,找到满足以下等式的四个唯一整数

javascript - 从 n 位数组返回 k 位数字的函数

java - 一编辑距离