1 条题解
-
0
自动搬运
来自洛谷,原作者为

Union_of_Britain
神于天搬运于
2025-08-24 21:26:37,当前版本为作者最后更新于2024-02-23 23:28:38,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
注:本文基本上是对参考文献 的翻译。这份论文是法语的,并且我没找到英语版本或中文介绍(
大家应该很熟悉汉诺塔了把,,,这里就不解释三柱汉诺塔了。
Frame-Stewart 算法
对于有 个圆盘 和 个柱子的汉诺塔,该算法寻找 ,使得以下步骤得到操作次数最小:
-
把前 个通过 个柱子移到一个非目标柱子上。
-
把剩下的圆盘通过 个柱子移到目标柱子上去。
-
把前 个通过 个柱子移到目标柱子上。
设其答案为 ,有:
$$\Phi(p,N)=\min_{1\le l<N}(2\Phi(p,l)+\Phi(p-1,N-l)) $$边界条件:。
如何证明其正确性呢?这是一个困难的问题,见下文所述。
如何解决本题
这个算法真的有人在意他的正确性吗?
好吧还真有。
// Problem: P1573 栈的操作 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P1573 // Memory Limit: 125 MB // Time Limit: 1000 ms // UOB Koala' // // // Powered by CP Editor (https://cpeditor.org) #include<bits/stdc++.h> using namespace std; #define int long long const int mod=1e6+7; int qp(int a,int b){ if(b==0)return 1; int T=qp(a,b>>1);T=T*T%mod; if(b&1)return T*a%mod; return T; } int calc(int n){ int t=(0.5+sqrt(2.0*n)); int res=(1-qp(2,t-2)*(t*t-3*t-2*n+4)%mod+mod)%mod; return res; } signed main(){ int n;cin>>n; cout<<calc(n)<,endl; return 0; }按照下面讲的通项公式实现即可。
有关 和 的代数性质
有必要引入几个重要函数及其性质来辅助证明定理 和定理 。
设
$$\Delta (n)=n(n+1)/2,\nabla(n)=\max\{k\ge 0\mid \Delta(k)\le n\} $$此时有 。
参考文献 2 指出,
可以发现其的确和 的递推式吻合,所以说 即为所找 。根据这一点不难得出其通项公式
其中 。
推论:
$$\forall a,b\in \mathbb{N},\Phi(a+b)\le 2\Phi(a)+2^b-1 $$引理 1:对于 ,
证明:显然其在 时成立, 逐渐增加到 时都不会改变 的 值,得证。
定义函数
$$\Psi_L(E)=(1-L)2^L-1+\sum_{u\in E}2^{\min(\nabla u,L)} $$不难发现其是良定义的。
引理 2:,
证明:
时命题成立。因此假设 。
类似于带余除法地,设 ,其中 ,此时 。
根据引理 ,有:
因此 ,有:
$$\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)\}) $$此式 当且仅当:
即 ,等价于 。因此只需计算 。
$$\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} $$证毕。
推论:
$$\forall a,b\in \mathbb{N},\Psi[a+b]\le 2\Psi[a]+2^{b-1} $$根据引理 化为 即可。
引理 :,
设 。根据 递增,仅需考虑 。
容易验证 时成立,对于 ,根据引理 ,
证毕。
引理 :,
是显然的。
:设 排序后为 。此时有 。所以
$$\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_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 $$证毕。
引理 :设 ,
设 。放缩:
$$\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} $$引理 :设 ,,使得 ,那么:
可以假设 ,那么 。,根据前面的结果,
$$\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 $$那么 ,所以:
$$\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} $$证毕。
引理 :
设 $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-[\Delta\sigma])\le t+\#([n]-[\Delta\sigma])=t+\max(0,n-\Delta\sigma)\le \max(t,\sigma) $$下面证明 :
所以
而 。证毕。
引理 :
设 ,则
$$\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) $$等号可直接通过定义得到,关注不等号:
设 。根据引理 ,总有 。所以:
$$\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) $$和上面类似地,设 ,其中 。
根据引理 ,有:
$$\Phi(n+3)=1+(m+p-1)2^m\\ \Phi(\Delta(m-2))=1+(m-3)2^{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} $$这些引理会在后面的证明被反复应用。
定理 及其证明
汉诺塔游戏和定理
接下来回到原问题汉诺塔问题。
从小到大对圆盘用 标号。记 是柱子集合,比方说 。
一个汉诺塔游戏的状态可以使用一个函数 表示。 表示 盘子所在柱子。所有状态的集合显然就是 。
定义距离函数 ,是两个状态通过合法操作互化的最小操作次数。
定理 :
设 , 是两个 圆盘 柱汉诺塔的状态。如果 ,那么:
这个定理意味着, 圆盘 柱汉诺塔的答案 。
下面大部分的篇幅将会证明这个定理。
定理 的证明
定义和基础性质
我们采取对 归纳的方法。边界条件是显然的。
设 。可以假设 ,否则命题显然。
设 ,是 移除掉最大的圆盘的状态。
有:
若 ,显然;因此,假设 。不妨设 。
接下来定义路径。设 。路径是函数 ,且满足 ,。下面,也用 指代 (应用柯里化技巧)。
事实上,把所有的状态可以一步互化的连上无向边,得到的图上 到 的任意一条最短路径就是上面的 。
设 ,即初始在第 柱,但经过第 柱的圆盘集合。
考虑 的情况。这就是三柱问题,而根据引理 知道 ,而 。
设 ,,(可能是 )。设 。
显然有 。
设 是最小的整数使得 ,即 已经离开 柱子的时间。设状态 。在这一状态中,第 柱的顶部是 ,移动到的那一柱的顶部 。设 是最小的整数使得 。类似地,设 。在这一状态中,第 柱的顶部是 ,来的那一柱顶部 。显然 。
设 是最小的整数使得 ,并设 。在这一状态中,第 柱的顶部是 ,移动到的那一柱是空的。设 是最大的整数使得 ,并设 。在这一状态中,第 柱的顶部是 ,来的那一柱是空的。此时有 。
类似地定义 是忽略 圆盘的 , 是忽略 的圆盘的 。 同理。
观察到 的两列都是空的。所以可以类似地应用归纳假设:
$$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,z_0)\ge d(u',z_0')\ge \Psi(E)-2^{\nabla(T+K+1)-1} $$先考虑 。
这意味着 经过了 柱,最后留在 柱。
因为 ,所以 到 的路径 一定形如:
设 。所以在状态 中,所有圆盘都在除了 的那两个柱子上。设:
不妨设 是依下表的值:
设
因为 ,根据引理 ,有:
$$=\frac 14(2^{\nabla (N+1)}+2^{\nabla N})+\frac 12 \Psi[N-1]-1 $$在 中, 柱和另一柱为空,因此可以应用归纳假设:
而在 中, 和 柱为空,有:
而在 到 的路径上, 的圆盘至少做了 次操作(因为路径结构),而 至少需要 ,所以
那么
接下来解决最后一种情况:,所以 。
此时我们无从比较 和 ,难以像之前一样直接每段放缩,只能分类讨论。
假设 。
那么 的路径一定形如:
在状态 中, 和 不包含小于 的圆盘。他们在剩下的两列里。所以,设 。
那么设:
其中 值依下表。
或 设
在状态 中, 和另一列是空的。因此应用归纳假设:
而在 中, 列为空。所以应用归纳假设:
而 ,所以:
$$\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] $$设 。因为 ,,即 。但是
即 。根据引理 ,。所以,。
设 。
的路径一定形如:
中间不能确定 和 的顺序。
在状态 中, 柱和 柱为空。因此所有圆盘都在 柱和 柱上。 一定在 柱上。
设
在状态 中, 柱和另一柱为空。因此可以应用归纳假设,。
而在状态 中, 柱为空,所以 。
所以
由于 ,在 到 , 的圆盘至少操作 次。从 到 , 的圆盘至少操作 次(依靠归纳假设)。此外,在 状态下, 圆盘都在 柱,在 却都不在 柱上,且不能经过 柱。因此,根据三柱汉诺塔,他们至少需要 次操作完成这个。最后,盘 在 到 至少被操作一次,盘 在 到 至少被操作一次。综上,
得到结果:
另外,由于 ,,根据引理 ,有:
根据上式,有:
根据引理 的推论,右式非负,所以 。
至此,定理 的所有情况证毕。
证明原命题-定理
定理 并没有显然地给出 Frame-Stewart Algorithm 的正确性。
定理 : 个圆盘的汉诺塔问题可以在 步内解决。
不妨设 。
设 是所有 个圆盘都在 柱的状态, 是所有圆盘都在 柱的状态。
到 的路径一定形如:
由于 有两列为空,应用定理 :
$$d(u,z_0)\ge d(u',z_0')\ge \Psi\{k\in [N-1]\mid u(k)=0\}=\Psi[N-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) $$最后一个等号来源于引理 。
证毕。
参考文献
参考文献 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.
-
- 1
信息
- ID
- 566
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者