通过使用良好的状态空间然后搜索树来解决河内塔

时间:2011-06-19 10:36:25

标签: artificial-intelligence towers-of-hanoi

我想用一个好的“国家空间”解决“河内塔”的问题。使用适当的状态空间是一些AI技术所建议的方式。拥有一个良好的状态空间,我希望能够构建一个搜索树,然后使用一些策略,如“DFS”(深度优先搜索)来找到解决方案。

我的问题是,我只是不知道如何开发一个好的状态空间然后用它来构建一个搜索树。任何人都可以描述如何为河内塔问题创建一个州空间吗?然后告诉我如何为它构建搜索树?

3 个答案:

答案 0 :(得分:7)

我建议使用以下状态空间:

假设你有n个砖和3个塔,用0,1,2表示。例如,通过n个数字表示当前状态(在n = 9的情况下):

987654321
001102020 (current state)

意味着砖9,8,5,3和1位于第0塔。 1号塔中的砖7和6以及2号塔中的砖4和2。

这会给你一个大小为3 ^ n的状态空间,这个空间不会太大。

(这只是部分答案。但每个州的字符串都对应一个合法的州。也就是说,

  1. 在每个塔的大小砖 将从下到上消除,

  2. 两块不同的砖块会出现 塔。

  3. 因此,我认为建议的状态空间很小。 )

答案 1 :(得分:1)

对于河内问题的塔,

2 ^(n + 1)-1是不正确的。如果你看图2 here,那么当应用n = 3到2 ^(n + 1)-1时,给出2 ^ 4 - 1或15个状态。但figure 2显示了27个州。

答案 2 :(得分:1)

我认为您可以使用Divide and Conquer方法轻松解决此问题: 假设U必须解决使用一些辅助挂钩将n个光盘从src移动到dest的问题。 你可以递归地定义一个函数:

towers(n,src,dest,peg)
{
    if(n==1) //BASE CASE
        move a disc from src to dest. 

   else  //INDUCTIVE CASE
   {
    towers(n-1,src,aux,dest);
    towers(1,src,dest,aux);
    towers(n-1,aux,dest,src)
   }
}

复杂性分析: T(N)= 2T(N-1)+1

这导致解T(n)= O(2 ^ n)[指数阶数]。

可能你也可以通过员工进行某种记忆来存储已经解决的子问题的解决方案,以进一步提高时间复杂度,但这是增加空间复杂度使用的一个折衷。