这是河内算法的递归塔是一种不知情的搜索

Is this recursive Tower of Hanoi Algorithm a type of uninformed search?

本文关键字:不知情 搜索 一种 递归塔 算法      更新时间:2023-10-16
void Form(int N, char pegA, char pegB, char pegC) {
    if (N == 1)
        cout<<"move top disk on peg "<<pegA<<" to peg"<<pegC<<endl;
    else {
        Form(N-1, pegA, pegC, pegB);
        cout<<"move top disk on peg "<<pegA<<" to peg"<<pegC<<endl;
        Form(N-1, pegB, pegA, pegC); 
    }
}

这是河内游戏塔的递归算法。这可以是深度优先搜索的一种形式吗?如果没有,那是什么?谢谢

这不是一个深度优先的搜索,因为我们知道每次要进行哪种动作,因此别无选择。您可以这样考虑。只不过是。

看,对于深度第一次搜索,我们该怎么办?我们更深入,然后尝试找到正确的方法。但是在这里,您能告诉我一举一动吗?没有。

因此,这是一种简单的递归方法,我们求解了问题的较小实例,然后 construct >较大的,简单地说,从较小的结果来看。就是这样。

这不是第一次搜索的深度。

这是递归树遍历 ...潜水?

算法内置的逻辑是在算法中内置的,它巧妙地使用递归来处理每个子塔过渡。这里没有搜索。

该算法以以下方式起作用

  • 递归结束:
    • 剩下一个磁盘时,将其移至目的地钉
    • 这是每个子塔的末尾
  • 递归逻辑:
    • 将所有磁盘移动到我们感兴趣的一个磁盘上方
    • 输出我们感兴趣的磁盘的移动命令
    • 移动我们刚移动的磁盘上方移动之前移动的所有磁盘。

这样做的方式是通过对PEG参考的巧妙(且令人困惑的(操纵。它重现是源和目的地钉时,当它进行第二个递归调用时。

要注意的另一件事:

该算法中没有持久状态。每层关心的唯一状态是n的状态,只有在1或1的情况下。在功能输入时,已知当前层的状态(在启动钉(和上面的所有层(也在start PEG上(,并且不需要电流以下的任何磁盘的状态。

这就是为什么不需要真正移动的原因;众所周知,有关状态变化的知识可以编码到算法中(并且是按照传递到递归呼叫的钉的变化顺序(。无需基于当前状态的决定,因此无需实现状态。