注:本文基本上是对参考文献 \(1\) 的翻译。这份论文是法语的,并且我没找到英语版本或中文介绍(

大家应该很熟悉汉诺塔了把,,,这里就不解释三柱汉诺塔了。

Frame-Stewart 算法

对于有 \(N\) 个圆盘 \(p\) 和 \(p(p\ge 3)\) 个柱子的汉诺塔,该算法寻找 \(1\le l<N\),使得以下步骤得到操作次数最小:

  • 把前 \(l\) 个通过 \(p\) 个柱子移到一个非目标柱子上。

  • 把剩下的圆盘通过 \(p-1\) 个柱子移到目标柱子上去。

  • 把前 \(l\) 个通过 \(p\) 个柱子移到目标柱子上。

设其答案为 \(\Phi(p,N)\),有:

\[\Phi(p,N)=\min_{1\le l<N}(2\Phi(p,l)+\Phi(p-1,N-l))
\]

边界条件:\(\Phi(3,N)=2^N-1,\Phi(p,1)=1\)。

如何证明其正确性呢?这是一个困难的问题,见下文所述。

有关 \(\Psi\) 和 \(\Phi\) 的代数性质

有必要引入几个重要函数及其性质来辅助证明定理 \(9\) 和定理 \(10\)。

设

\[[n]=\{0,1,\dots,n-1\}
\]
\[\Delta (n)=n(n+1)/2,\nabla(n)=\max\{k\ge 0\mid \Delta(k)\le n\}
\]
\[\Phi(n)=\sum _{i=0}^{n-1}2^{\nabla(i)}
\]

此时有 \(\Delta u=u+\Delta(u-1)\)。

参考文献 2 指出,

\[\Phi(n)=\min_{0\le m<n}2\Phi(m)+2^{n-m}-1
\]

可以发现其的确和 \(\Phi(4,N)\) 的递推式吻合,所以说 \(\Phi(n)\) 即为所找 \(\Phi(4,N)\)。根据这一点不难得出其通项公式

\[\Phi(n)=1-2^{t-2}(t^2-3t+4-2n)
\]

推论:

\[\forall a,b\in \mathbb{N},\Phi(a+b)\le 2\Phi(a)+2^b-1
\]

其中 \(t=\lceil \sqrt{2n}\rceil\)。

引理 1:对于 \(n,p\in \mathbb{N},p\le n+1\),

\[\Phi(\Delta n+p)=1+(n+p-1)2^n
\]

证明:显然其在 \(p=0\) 时成立,\(p\) 逐渐增加到 \(n+1\) 时都不会改变 \(\Delta n+p-1\) 的 \(\nabla\) 值,得证。

定义函数

\[\Psi_L(E)=(1-L)2^L-1+\sum_{u\in E}2^{\min(\nabla u,L)}
\]
\[\Psi(E)=\sup _{L\in \mathbb{N}}\Psi_L(E)
\]

不难发现其是良定义的。

引理 2:\(\forall n\in\mathbb{N}\),

\[\Psi[n]=\frac{\Phi(n+1)-1}2
\]

证明:

\(n=0\) 时命题成立。因此假设 \(n\ge 1\)。

类似于带余除法地,设 \(n=\Delta m+p\),其中 \(m=\nabla n\),此时 \(0\le p\le m\)。

根据引理 \(1\),有:

\[\Phi(\Delta m)=1+(m-1)2^m
\]
\[\Phi(n+1)=1+(m+p)2^m
\]

因此 \(\forall L\in \mathbb{N}\),有:

\[\Psi_{L+1}[n]-\Psi_L[n]=-(L+1)2^L+\sum _{u\in [n]}2^{\min(\nabla u,L+1)}-2^{\min(L,\nabla u)}
\]
\[=-(L+1)2^L+2^L(\#\{u\in [n]\mid u\ge \Delta(L+1)\})
\]
\[=2^L(\max(0,n-\Delta(L+1))-(L+1))
\]

此式 \(>0\) 当且仅当:

\[n\ge \Delta(L+1)+L+2=\Delta(L+2)
\]

即 \(\nabla n\ge L+2\),等价于 \(L<m-1\)。因此只需计算 \(\Psi_{m-1}[n]\)。

\[\Psi_{m-1}(n)=(2-m)2^{m-1}-1+\sum _{0\le i<\Delta m}2^{\nabla i}+\sum_{\Delta m\le k<n}2^{m-1}
\]
\[=(2-m)2^{m-1}-1+\Phi(\Delta m)+(n-\Delta m)2^{m-1}
\]
\[=m2^{m-1}+p2^{m-1}
\]
\[=\frac{\Phi(n+1)-1}2
\]

证毕。

推论:

\[\forall a,b\in \mathbb{N},\Psi[a+b]\le 2\Psi[a]+2^{b-1}
\]

根据引理 \(2\) 化为 \(\Phi\) 即可。

引理 \(3\):\(\forall n\in \mathbb{N}\),

\[\Psi[n+2]\ge 2^{(\nabla n)+1}
\]

设 \(s=\nabla n\)。根据 \(\Psi[\cdot]\) 递增,仅需考虑 \(\Psi[\Delta s+2]\ge 2^{s+1}\)。

容易验证 \(s<2\) 时成立,对于 \(s\ge 2\),根据引理 \(2\),

\[\Psi[\Delta s+2]=(s+2)2^{s-1}\ge 2^{s+1}
\]

证毕。

引理 \(4\):\(\forall E\subset N,\#E=n\),

\[n\le \Psi[n]\le \Psi (E)\le 2^n-1
\]

\(n\le \Psi[n]\) 是显然的。

\(\Psi[n]\le \Psi (E)\):设 \(E\) 排序后为 \(e_0<e_1<\dots<e_{n-1}\)。此时有 \(e_i\ge i\)。所以

\[\Psi_L(E)=(1-L)2^L-1+\sum_{i}2^{\min(\nabla e_i,L)}\ge (1-L)2^L-1+\sum_{i}2^{\min(\nabla i,L)}=\Psi_L[n]
\]

\(\Psi(E)\le 2^n-1\):放缩,

\[\Psi_L(E)=(1-L)2^L-1+\sum_{i\in E}2^{\min(\nabla u,L)}
\]
\[\le (1-L)2^L-1+\sum_{i\in E}2^{L}=(1+n-L)2^L-1\le 2^{n}-1
\]

证毕。

引理 \(5\):设 \(A,B\subset \mathbb{N}\),

\[\Psi(A)-\Psi(B)\le \sum_{u\in A-B}2^{\nabla u}
\]

设 \(\Psi(A)=\Psi_L(A)\)。放缩:

\[\Psi(A)-\Psi(B)\le \Psi_L(A)-\Psi_L(B)\le \Psi_L(A)-\Psi_L(A\cap B)
\]
\[=\sum _{u\in A-B}2^{\min (\nabla u,L)}\le \sum _{u\in A-B}2^{\nabla u}
\]

引理 \(6\):设 \(A\subset \mathbb{N}\),\(s\in \mathbb{N}\),使得 \(\#(A-[\Delta s])\le s\),那么:

\[\Psi(A)-\Psi(A-\{a\})\le 2^{s-1},\forall a\in A
\]

可以假设 \(A\neq \varnothing\),那么 \(s\ge 1\)。\(\forall L\ge s-1\),根据前面的结果,

\[\Psi_{L+1}(A)-\Psi_L(A)=2^L(\#\{n\in A\mid n\ge \Delta(L+1)\}-L-1)\le 2^L(\#\{n\in A\mid n\ge \Delta s\}-s)\le 0
\]

那么 \(\exists L\le s-1,\Psi(A)=\Psi_L(A)\),所以:

\[\Psi(A)-\Psi(A-\{a\})\le \Psi_L(A)-\Psi_L(A-\{a\})=2^{\min(\nabla a,L)}\le 2^L\le 2^{s-1}
\]

证毕。

引理 \(7\):

设 \(n,s\in \mathbb{N},s\ge 1,n\ge \Delta(s-1),A\in [n],b_{1:s}\in \mathbb{N}^s\)。有:

\[\Psi(A\cup \{b_{1:s}\})-\Psi(A)\le \Psi[n+s]-\Psi[n]
\]

设 \(A_t=A\cup \{b_{1:t}\},0\le t\le s\)。原命题等价于

\[\Psi(A_t)-\Psi(A_{t-1})\le \Psi[n+t]-\Psi[n+t-1]
\]

只需考虑 \(t>0,b\) 互不相同。

根据引理 \(2\),右式可以写作 \(2^{\sigma -1}\),其中 \(\sigma=\nabla (n+t)\)。根据引理 \(6\),只需证明 \(\#(A_t-[\Delta\sigma])\le \sigma\)。

注意到 \(\Delta(\sigma+1)>n+t\),即 \(\sigma+\Delta\sigma\ge n+t\),所以

\[\#(A_t-[\Delta\sigma])\le t+\#([n]-[\Delta\sigma])=t+\max(0,n-\Delta\sigma)\le \max(t,\sigma)
\]

下面证明 \(\sigma\ge t\):

\[\Delta t-t=\Delta(t-1)\le \Delta(s-1)\le n
\]

所以

\[\Delta t\le n+t
\]

而 \(\sigma=\nabla(n+t)\ge t\)。证毕。

引理 \(8\):

设 \(A,B\subset \mathbb{N},n=\#(A\cup B)\),则

\[\Psi(A)+\Psi(B)\ge \frac{\Phi(n+3)-5}4=\frac 12\Psi[n+2]-1=\frac 14\left(\sum _{i=3}^{n+2}2^{\nabla i}\right)
\]

等号可直接通过定义得到,关注不等号:

设 \(E=A\cup B,L\in \mathbb{N}\)。根据引理 \(4\),总有 \(\Psi_L(E)\ge \Psi_L[n]\)。所以:

\[\Psi(A)+\Psi(B)\ge \Psi_L(A)+\Psi_L(B)=\Psi_L(A\cap B)+\Psi(A\cup B)\ge \Psi _L(\varnothing)+\Psi_L(E)
\]
\[\ge \Psi_L[0]+\Psi_L[n]
\]

和上面类似地,设 \(n+3=\Delta m+p\),其中 \(m=\nabla (n+3)\)。

根据引理 \(1\),有:

\[\Phi(n+3)=1+(m+p-1)2^m\\
\Phi(\Delta(m-2))=1+(m-3)2^{m-2}
\]

取 \(L=m-2\)。这样

\[\Psi_L[0]+\Psi_L[n]=(1-L)2^{L+1}-2+\sum_{i=0}^{n-1}2^{\min(\nabla i,L)}
\]
\[=(3-m)2^{m-1}-2+\sum _{i=0}^{\Delta(m-2)-1}2^{\nabla i}+\sum_{i=\Delta(m-2)}^{n-1}2^{m-2}
\]
\[=(3-m)2^{m-1}-2+\Phi(\Delta(m-2))+(n-\Delta(m-2))2^{m-2}
\]
\[=(m+p-1)2^{m-2}-1=\frac{\Phi(n+3)-5}{4}
\]

这些引理会在后面的证明被反复应用。

定理 \(9\) 及其证明

汉诺塔游戏和定理 \(9\)

接下来回到原问题汉诺塔问题。

从小到大对圆盘用 \([N]\) 标号。记 \(C\) 是柱子集合,比方说 \(\{0,1,2,3\}\)。

一个汉诺塔游戏的状态可以使用一个函数 \(u:[N]\to C\) 表示。\(u(a)\) 表示 \(a\) 盘子所在柱子。所有状态的集合显然就是 \(C^{[N]}\)。

定义距离函数 \(d(u,v):(C^{[N]})^2\to \mathbb{N}\cup \{\infty\}\),是两个状态通过合法操作互化的最小操作次数。

定理 \(9\):

设 \(C=\{0,1,2,3\},N\in \mathbb{N}\),\(u,v\) 是两个 \(N\) 圆盘 \(4\) 柱汉诺塔的状态。如果 \(\forall i,v(i)\in \{2,3\}\),那么:

\[d(u,v)\ge \Psi(k\in [N]\mid u(k)=0)
\]

这个定理意味着,\(N\) 圆盘 \(4\) 柱汉诺塔的答案 \(\ge \Psi[N]\)。

下面大部分的篇幅将会证明这个定理。

定理 \(9\) 的证明

定义和基础性质

我们采取对 \(N\) 归纳的方法。边界条件是显然的。

设 \(E=\{k\in [N]\mid u(k)=0\}\)。可以假设 \(E\neq \varnothing\),否则命题显然。

设 \(u',v':[N-1]\to C\),是 \(u,v\) 移除掉最大的圆盘的状态。

有:

\[d(u,v)\ge d(u',v')\ge \Psi(E-\{N-1\})
\]

若 \(N-1\not\in E\),显然;因此,假设 \(N-1\in E\)。不妨设 \(v(N-1)=2\)。

接下来定义路径。设 \(d(u,v)=D\)。路径是函数 \(\gamma:[D+1]\to C^{[N]}\),且满足 \(\gamma(0)=u,\gamma(D)=v\),\(d(\gamma(i),\gamma(j))=|i-j|,\forall i,j\in [D+1]\)。下面,也用 \(\gamma _i\) 指代 \(\gamma(i)\)(应用柯里化技巧)。

事实上,把所有的状态可以一步互化的连上无向边,得到的图上 \(u\) 到 \(v\) 的任意一条最短路径就是上面的 $\gamma $。

设 \(E'=\{k\in E\mid \exists t\in [D+1],\gamma_t(k)=3\}\),即初始在第 \(0\) 柱,但经过第 \(3\) 柱的圆盘集合。

考虑 \(E'=\varnothing\) 的情况。这就是三柱问题,而根据引理 \(4\) 知道 \(\Psi (E)\le 2^{\# E}-1\),而 \(D\ge 2^{\# E}-1\ge \Psi(E)\)。

设 \(T=\max E'\),\(E''=E-[T+1]\),\(K=|E''|\)(可能是 \(0\))。设 \(E''=\{b_{1:K}\},b_i<b_{i+1}\)。

显然有 \(T+K+1\le N\)。

设 \(t_0\) 是最小的整数使得 \(\gamma_{t_0}(T)\neq 0\),即 \(T\) 已经离开 \(0\) 柱子的时间。设状态 \(x_0=\gamma(t_0-1)\)。在这一状态中,第 \(0\) 柱的顶部是 \(T\),移动到的那一柱的顶部 \(>T\)。设 \(t_1\) 是最小的整数使得 \(\gamma_{t_1}(T)=3\)。类似地,设 \(x_3=\gamma(t_1)\)。在这一状态中,第 \(3\) 柱的顶部是 \(T\),来的那一柱顶部 \(>T\)。显然 \(1\le t_0\le t_1\le D\)。

设 \(t_2\) 是最小的整数使得 \(\gamma_{t_2}(N-1)\neq 0\),并设 \(z_0=\gamma(t_2-1)\)。在这一状态中,第 \(0\) 柱的顶部是 \(N-1\),移动到的那一柱是空的。设 \(t_3\) 是最大的整数使得 \(\gamma_{t_3}(N-1)\neq 2\),并设 \(z_2=\gamma (t_3+1)\)。在这一状态中,第 \(2\) 柱的顶部是 \(N-1\),来的那一柱是空的。此时有 \(t_2\le t_3+1\)。

类似地定义 \(x'_a,z'_b\) 是忽略 \(N-1\) 圆盘的 \(x_a,z_b\),\(x_a'',z_b''\) 是忽略 \(\ge T\) 的圆盘的 \(x_a,z_b\)。

观察到 \(z_0'\) 的两列都是空的。所以可以类似地应用归纳假设:

\[d(u,z_0)\ge d(u',z_0')\ge \Psi\{k\in [N-1]\mid u(k)=0\}=\Psi(E-\{N-1\})
\]

类似地:

\[d(u,x_0)\ge d(u'',x_0'')\ge \Psi(E\cap [T])
\]

\(\Delta K>T\)

首先考虑 \(\Delta K>T\) 的情形。

此时有 \(K\ge 1,T<b_k=N-1\),也就是说 \(N-1\) 没有经过第 \(3\) 柱。

此外,注意到 \((E-[\Delta K])\subset E''\),\(\#(E-[\Delta K])\le \Delta K\),那么可以应用引理 \(6\):

\[\Psi (E)-\Psi(E-\{N-1\})\le 2^{K-1}
\]

与上面的式子结合,得到

\[d(u,z_0)\ge \Psi(E)-2^{K-1}
\]

由于 \(t_2\le t_3+1\),\(u\) 到 \(v\) 的路径 \(\gamma\) 一定形如:

\[u\to z_0\to z_2\to v
\]

考虑 \(z_2\) 的 \(2\) 柱和 \(c=\gamma_{t_3}(N-1)\)(\(c\in\{0,1\}\))柱上不能有 \(<N-1\) 的圆盘,所以 \(b_{1:K-1}\) 一定都在 \(1-c\) 柱上。这些盘最后(\(v\))一定都在 \(2\) 柱上,而这些圆盘不被允许通过第 \(3\) 柱。根据三柱汉诺塔,有:

\[d(z_2,v)\ge 2^{K-1}-1
\]

而 \(d(z_0,z_2)\ge 1\),所以:

\[D=d(u,z_0)+d(z_0,z_2)+d(z_2,v)
\]
\[\ge (\Psi(E)-2^{K-1})+1+(2^{K-1}-1)=\Psi(E)
\]

证毕。

\(\Delta K\le T\)

其次考虑 \(\Delta K\le T\) 的情况。

取 \(s=\nabla(T+K+1)\)。由于 \(E=[T+1]\cup E''\),\(\#(E-[\Delta s])\le \max(T+1-\Delta s,0)+K\)。

显然 \(s\ge \nabla T\ge K\)。并且 \(T+K+1<\Delta(s+1)=\Delta s+s+1\),那么 \(T+K+1-\Delta s\le s\)。根据以上两条,有:

\[\#(E-[\Delta s])\le s
\]

所以应用引理 \(6\) 有:

\[\Psi(E)-\Psi(E-\{N-1\})\le 2^{s-1}
\]

这次作用于上面的式子得到的结果是

\[d(u,z_0)\ge d(u',z_0')\ge \Psi(E)-2^{\nabla(T+K+1)-1}
\]

\(K=0\)

先考虑 \(K=0\)。

这意味着 \(T=N-1\) 经过了 \(3\) 柱,最后留在 \(2\) 柱。

因为 \(t_1\le t_3\),所以 \(u\) 到 \(v\) 的路径 \(\gamma\) 一定形如:

\[u\to z_0=x_0\to x_3\to z_2\to v
\]

设 \(c=\gamma_{t_3}(N-1)\neq 2\)。所以在状态 \(z_2'\) 中,所有圆盘都在除了 \(2,c\) 的那两个柱子上。设:

\[\{0,1,2,3\}-\{2,c\}=\{a,b\}
\]

不妨设 \(a,b\) 是依下表的值:

\(c\) \(0\) \(1\) \(3\)
\(a\) \(3\) \(3\) \(0\)
\(b\) \(1\) \(0\) \(1\)

设

\[A=\{k\in [N-1]\mid z_2(k)=a\}
\]
\[B=\{k\in [N-1]\mid z_2(k)=b\}
\]

因为 \(A\cup B=[N-1]\),根据引理 \(8\),有:

\[\Psi(A)+\Psi(B)\ge \frac 12\Psi[N+1]-1
\]
\[=\frac 14(2^{\nabla (N+1)}+2^{\nabla N})+\frac 12 \Psi[N-1]-1
\]
\[\ge 2^{\nabla(T+K+1)-1}+\frac 12 \Psi[N-1]-1
\]

在 \(x'_a\) 中, \(a\) 柱和另一柱为空,因此可以应用归纳假设:

\[d(z_2',x_a')\ge \Psi(A)
\]

而在 \(v'\) 中,\(0\) 和 \(1\) 柱为空,有:

\[d(z_2,v)\ge d(z_2',v')\ge \Psi(B)
\]

而在 \(z_0\) 到 \(z_2\) 的路径上,\([N-1]\) 的圆盘至少做了 \(d(x_a',z_2')\) 次操作(因为路径结构),而 \(N-1\) 至少需要 \(0\to 3\to 2\),所以

\[d(z_0,z_2)\ge \Psi(A)+2
\]

那么

\[D=d(u,v)=d(u,z_0)+d(z_0,z_2)+d(z_2,v)
\]
\[\ge \Psi(E)-2^{\nabla(T+K+1)-1}+\Psi(A)+2+\Psi(B)
\]
\[\ge \Psi(E)+1+\frac 12 \Psi[N-1]\ge \Psi(E)
\]

\(K\ge 1\)

接下来解决最后一种情况:\(K\ge 1\),所以 \(T<b_k=N-1\)。

此时我们无从比较 \(t_1\) 和 \(t_3+1\),难以像之前一样直接每段放缩,只能分类讨论。

\(t_1>t_3+1\)

假设 \(t_1>t_3+1\)。

那么 \(u\to v\) 的路径一定形如:

\[u\to z_0\to z_2\to x_3\to v
\]

在状态 \(x_3\) 中,\(3\) 和 \(d=\gamma_{t_1-1}(T)\) 不包含小于 \(T\) 的圆盘。他们在剩下的两列里。所以,设 \(c=\gamma_{t_3}(N-1)\in \{0,1\}\)。

那么设:

\[\{0,1,2,3\}-\{3,d\}=\{a,b\}
\]

其中 \(a,b\) 值依下表。

\(d\) \(0\) 或 \(1\) \(2\)
\(a\) \(2\) \(c\)
\(b\) \(1-d\) \(1-c\)

设

\[A=\{k\in [T]\mid x_3(k)=a\}
\]
\[B=\{k\in [T]\mid x_3(k)=b\}
\]

在状态 \(z_2''\) 中, \(a\) 和另一列是空的。因此应用归纳假设:

\[d(x_3,z_2)\ge d(x_3'',z_2'')\ge \Psi(A)
\]

而在 \(v''\) 中, \(0,1\) 列为空。所以应用归纳假设:

\[d(x_3,v)\ge d(x_3'',v'')\ge \Psi(B)
\]

而 \(d(z_0,z_2)\ge 1\),所以:

\[D=d(u,v)=d(u,z_0)+d(z_0,z_2)+d(z_2,z_3)+d(x_3,v)
\]
\[\ge \Psi(E)-2^{\nabla (T+K+1)-1}+1+\Psi(A)+\Psi(B)
\]
\[\ge \Psi(E)-2^{\nabla(T+K+1)-1}+\frac 12 \Psi[T+2]
\]

设 \(s=\nabla(T+K+1)\)。因为 \(T\ge \Delta K\),\(T+K+1\ge \Delta(K+1)\),即 \(s\ge K+1\)。但是

\[T=(T+K+1)-(K+1)\ge \Delta s-s=\Delta(s-1)
\]

即 \(\nabla T\ge s-1\)。根据引理 \(3\),\(\Psi[T+2]\ge 2^s\)。所以,\(D\ge \Psi (E)\)。

\(t_1<t_3+1\)

设 \(t_1<t_3+1\)。

\(u\to v\) 的路径一定形如:

\[u\to x_0\to x_3/z_0\to z_2\to v
\]

中间不能确定 \(x_3\) 和 \(z_0\) 的顺序。

在状态 \(z_2'\) 中,\(2\) 柱和 \(c=\gamma_{t_3}(N-1)\in \{0,1\}\) 柱为空。因此所有圆盘都在 \(3\) 柱和 \(b=1-c\) 柱上。\(b_{1:K-1}\) 一定在 \(b\) 柱上。

设

\[A=\{k\in [T]\mid z_2(k)=3\}
\]
\[B=\{k\in [N-1]\mid z_2(k)=b\}
\]

在状态 \(x_3''\) 中,\(3\) 柱和另一柱为空。因此可以应用归纳假设,\(d(z_2'',x_3'')\ge \Psi(A)\)。

而在状态 \(v'\) 中,\(0,1\) 柱为空,所以 \(d(z_2,v)\ge d(z_2',v')\ge \Psi(B)\)。

\[([T]\cup \{b_{1:K-1}\})\subset (A\cup B)
\]

所以

\[\Psi(A)+\Psi(B)\ge \frac 12 \Psi[T+K+1]-1
\]

由于 \(d(z_2'',x_3'')\ge \Psi(A)\),在 \(x_3\) 到 \(z_2\),\(<T\) 的圆盘至少操作 \(\Psi(A)\) 次。从 \(u\) 到 \(x_0\),\(<T\) 的圆盘至少操作 \(\Psi(E\cap [T])\) 次(依靠归纳假设)。此外,在 \(u\) 状态下,\(b_{1:K-1}\) 圆盘都在 \(0\) 柱,在 \(z_0\) 却都不在 \(0\) 柱上,且不能经过 \(3\) 柱。因此,根据三柱汉诺塔,他们至少需要 \(2^{K-1}-1\) 次操作完成这个。最后,盘 \(T\) 在 \(x_0\) 到 \(x_3\) 至少被操作一次,盘 \(N-1\) 在 \(z_0\) 到 \(z_2\) 至少被操作一次。综上,

\[d(u,z_2)\ge \Psi(E\cap [T])+\Psi(A)+2^{K-1}+1
\]

得到结果:

\[D=d(u,v)=d(u,z_2)+d(z_2,v)
\]
\[\ge\Psi(E\cap [T])+\Psi(A)+2^{K-1}+1+\Psi(B)
\]
\[\ge \Psi(E\cap [T])+\frac 12 \Psi[T+K+1]+2^{K-1}
\]

另外,由于 \(T\ge \Delta K\),\(E=(E\cap[T])\cup\{T,b_{1:K}\}\),根据引理 \(7\),有:

\[\Psi(E)-\Psi(E\cap [T])\le \Psi[T+K+1]-\Psi[T]
\]

根据上式,有:

\[D-\Psi(E)\ge \Psi(T)+2^{K-1}-\frac 12\Psi[T+K+1]
\]

根据引理 \(2\) 的推论,右式非负,所以 \(D\ge \Psi(E)\)。

至此,定理 \(9\) 的所有情况证毕。

证明原命题-定理 \(10\)

定理 \(9\) 并没有显然地给出 Frame-Stewart Algorithm 的正确性。

定理 \(10\):\(N\) 个圆盘的汉诺塔问题可以在 \(\Phi(N)\) 步内解决。

不妨设 \(N\ge 1\)。

设 \(u\) 是所有 \(N\) 个圆盘都在 \(0\) 柱的状态,\(v\) 是所有圆盘都在 \(2\) 柱的状态。

\(u\) 到 \(v\) 的路径一定形如:

\[u\to z_0\to z_2\to v
\]

由于 \(z_0\) 有两列为空,应用定理 \(9\):

\[d(u,z_0)\ge d(u',z_0')\ge \Psi\{k\in [N-1]\mid u(k)=0\}=\Psi[N-1]
\]

同样,

\[d(v,z_2)\ge \Psi[N-1]
\]

而 \(d(z_0,z_2)\ge 1\),所以:

\[d(u,v)=d(u,z_0)+d(z_0,z_2)+d(z_2,v)\ge 1+2\Psi[N-1]=\Phi(N)
\]

最后一个等号来源于引理 \(2\)。

证毕。

参考文献

参考文献 1 :T. Bousch. La quatri`eme tour de Hano¨ı. Bull. Belg. Math. Soc. Simon Stevin, 21:895–912,2014.

参考文献 2: S.Klav˘zar, U. Milutinovi´c, and C. Petr. On the Frame-Stewart algorithm for the multi-peg Tower of Hanoi problem.Discrete Appl. Math., 120(1–3):141–157, 2002.

四柱汉诺塔的 Frame-Stewart 算法及其最优性的更多相关文章

  1. hdu 1207 四柱汉诺塔

    递推,汉诺塔I的变形. 这题真心没想到正确解法,越想越迷糊.这题看了别人题解过得,以后还是自己多想想,脚步太快并非好事. 贴上分析:   分析:设F[n]为所求的最小步数,显然,当n=1时,F[n]= ...

  2. 4柱汉诺塔(zz)

    多柱汉诺塔可以用Frame–Stewart算法来解决. The Frame–Stewart algorithm, giving a presumably optimal solution for fo ...

  3. 多柱汉诺塔问题“通解”——c++

    多柱汉诺塔问题 绪言 有位同学看到了我的初赛模拟卷上有一道关于汉诺塔的数学题.大概就是要求4柱20盘的最小移动次数. 他的数学很不错,找到了应该怎样推. 如果要把n个盘子移到另一个柱子上,步骤如下: ...

  4. The Towers of Hanoi Revisited---(多柱汉诺塔)

    Description You all must know the puzzle named "The Towers of Hanoi". The puzzle has three ...

  5. HDU汉诺塔系列

    这几天刷了杭电的汉诺塔一套,来写写题解. HDU1207 汉诺塔II HDU1995 汉诺塔V HDU1996 汉诺塔VI HDU1997 汉诺塔VII HDU2064 汉诺塔III HDU2077  ...

  6. 四柱加强版汉诺塔HanoiTower----是甜蜜还是烦恼

    我想很多人第一次学习递归的时候,老师或者书本上可能会举汉诺塔的例子. 但是今天,我们讨论的重点不是简单的汉诺塔算法,而是三柱汉诺塔的延伸.先来看看经典的三柱汉诺塔. 一.三柱汉诺塔(Hanoi_Thr ...

  7. 汉诺塔的问题:4个柱子,如果塔的个数变位a,b,c,d四个,现要将n个圆盘从a全部移到d,移动规则不变

    四柱汉诺塔问题的求解程序.解题思路:如a,b,c,d四柱. 要把a柱第n个盘移到目标柱子(d柱),先把上层 分两为两部份,上半部份移到b柱,下半部分移到c柱,再把第n盘移到 目标柱子,然后,c柱盘子再 ...

  8. [递推]B. 【例题2】奇怪汉诺塔

    B . [ 例 题 2 ] 奇 怪 汉 诺 塔 B. [例题2]奇怪汉诺塔 B.[例题2]奇怪汉诺塔 题目描述 汉诺塔问题,条件如下: 这里有 A A A. B B B. C C C 和 D D D ...

  9. python汉诺塔问题的递归理解

    一.问题背景 汉诺塔问题是源于印度一个古老传说. 源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下 ...

  10. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

随机推荐

  1. 【解决方案】Error running,Command line is too long

    一.现象 IDEA 提示 Error running,Command line is too long 二.原因 Java 命令行启动举例如下图,当命令行字符过多的时候,就会出现 Error runn ...

  2. 基于 MongoTemplate 实现MongoDB的复杂查询

    MongoDB是典型的非关系型数据库,但是它的功能越来越复杂,很多项目中,我们为了快速拓展,甚至直接使用Mongo 来替代传统DB做数据持久化.虽然MongoDB在支持具体业务时没有问题,但是由于它是 ...

  3. Conda + JuiceFS :增强 AI 开发环境共享能力

    Conda 是当前 AI 应用开发领域中非常流行的环境和包管理系统,因其能够简单便捷地创建与系统资源相隔离的虚拟环境广受欢迎. Conda 支持在不同的操作系统上重建相同的工作环境,但在环境共享复用方 ...

  4. HttpClientFactory in ASP.NET Core 2.1 Part 1 介绍

    HttpClientFactory in ASP.NET Core 2.1 Part 1 原文地址:https://www.stevejgordon.co.uk/introduction-to-htt ...

  5. mac 安装mysql详细教程(安装包方式)

    一:下载最新的MySQL社区版 为了安装更方便,建议下载dmg安装包.最新的版本是5.7.20.   MySQL 二:安装MySQL 双击 mysql-5.7.20-macos10.12-x86_64 ...

  6. 龙哥量化:期货软件中红红绿绿的"多开,空开,空平,多平,多换,空换,双开,双平,换手"是什么意思?(转载的)

    期货投资者在看盘时,会看到红红绿绿的"多开,空开,空平,多平,多换,空换,双开,双平,换手",以快期专业版为例,如下图1所示: 图1.红绿开平数据(快期专业版) 这些数据里面的红色 ...

  7. Qt/C++地图动态绘制折线多边形矩形圆形标注点/可编辑拖动调整大小和位置

    一.前言说明 无论哪一家的地图,都提供了调用函数绘制各种覆盖物,但是有时候的场景是希望进入添加覆盖物模式,然后每次在地图上按下都自动生成对应的覆盖物比如圆形,这样就不需要用户提前知道经纬度坐标等参数, ...

  8. Qt开发经验小技巧236-240

    关于在头文件中定义函数使用static关键字的血的教训. 有时候我们需要将一些常用函数写在一个文件中供很多地方调用,如果写的是 int doxxx{} 这种,在你多个地方引用的时候,肯定会编译报错提示 ...

  9. StarRocks元数据无法合并

    一.先说结论 如果您的StarRocks版本在3.1.4及以下,并且使用了metadata_journal_skip_bad_journal_ids来跳过某个异常的journal,结果之后就出现了FE ...

  10. 9.4classtest rewrite(仓库管理系统)

    第一部分,设计界面以及类的定义. import java.util.Scanner; public class viovo { static int number = 5;//五个商品信息 stati ...