zoukankan      html  css  js  c++  java
  • 多柱汉诺塔问题

      集训时遇到这种问题,觉得有点意思。

      设$f_m(x)$代表有$x$个盘子且可用$m$根柱子时,将$x$个盘子整体移动到另一根柱子的最小步数。

      首先是三柱的移动步数$f_3(n)$,先利用三根柱子把前$n-1$个盘子从$A$柱移动到$B$柱,消耗步数$f_3(n-1)$,然后把最大的一个从$A$柱移动到$C$柱,消耗步数$f_3(1)=1$,最后再把B柱上的$n-1$个盘子从$B$柱移动到$C$柱,消耗步数$f_3(n-1)$,于是有递推式$f_3(n)=2×f_3(n-1)+1$,再加上边界条件f_3(1)=1,可变换得$f_3(n)=2^n-1$.

      然后是四柱的,目标是将$n$个盘子从$A$柱移动到$D$柱,根据各种博客上的说法,步数最少的移动方式如下(手推感觉也差不多是这样,但好像还没人证明为什么能这样搞,通过调整$p$得到最小步数)——

        先利用$A$、$B$、$C$、$D$四根柱子,将$A$柱最上方的$p$个盘子$(0< p < n)$移动到$B$柱上(先移到$C$上也可以,都是暂时存放的作用),消耗步数$f_4(p)$;

        然后利用剩下的$A$、$C$、$D$三根柱子将$A$柱上的剩余$n-p$个盘子移动到$D$柱上,消耗步数$f_3(n-p)=2^{n-p}-1$;

        再利用$A$、$B$、$C$、$D$四根柱子,将$B$柱上的$p$个盘子移动到$D$柱上,消耗步数$f_4(p)$;

      于是$f_4(n)=2×f_4(p)+f_3(n-p)=2×f_4(p)+2^{n-p}-1$,然后这篇论文:   四柱汉诺塔之初步探究杨楷,徐川- 《北京大学学报(自然科学版)》2004年1期 证明了当$p=left lfloor frac{sqrt{8n+1}-1}{2} ight  floor$时$f_4(n)$时能够取到最小值$$f_4(n)=left(n-frac{p_2-p+2}{2} ight)×2^p+1$$

      柱子再多一些……留坑

  • 相关阅读:
    有趣的放大镜
    特效代码
    向数据库添加学生信息。存放在REQUEST对象里
    机房servlet过滤器
    冒泡排序法
    验证码 随机生成器 详解
    生成器 种子
    生日
    在字符串里寻找某字符出现的个数
    课堂随笔
  • 原文地址:https://www.cnblogs.com/wawcac-blog/p/10303865.html
Copyright © 2011-2022 走看看