如何计算河内塔的最大分支因子

How to calculate the maximum branching factor for the towers of hanoi

我正在用 n 个圆盘和 k 个钉子对河内塔问题进行建模,我正在尝试找到它的最大分支因子。问题在于,由于圆盘和钉子的数量都是可变的,因此每个节点可能的操作数量也是可变的。我怎样才能找到一种通用的方法来评估取决于 k 和 n 的最大分支因子?

一般来说,最小的圆盘可以移动到任何其他挂钩:k-1 个选项。

第二小的圆盘(在桩子上的堆栈顶部;可能不是整体上第二小的)可以移动到任何桩子上,除了具有最小圆盘的那个:k-2 个选项。

这一直持续到钉子顶部最大的圆盘,它不能移动到任何地方(假设 n>k)。

因此,预期的分支因子为:(k-1)+(k-2)+(k-3)+...+2+1 = (k-1)*k/2

唯一一次你不会得到这个是当其中一个钉子不包含磁盘时。如果 n>>k,这将很少发生。但是,这意味着如果你从随机状态搜索到目标状态,你应该考虑向后搜索,因为标准目标状态具有最低的分支因子,因为只有一个 peg 有一个圆盘。

n < k 的情况可以进行类似的分析,只是您在 n 个盘子后停止并减去我们第一次计算的移动的附加项,现在不可用:

k(k-1)/2 - (k-n)(k-n-1)/2