• [学习笔记]进阶指南day2-再探汉诺塔问题


    大概是一些口胡,参考了不少Wikipedia上的资料,这里也只是记录了自己看的一部分东西,实际上关于汉诺塔的变形似乎远不止这么多。


    先回顾原始版本的Hanoi问题的做法,ABC三个柱子,我们记为((n,A,B,C)),要把圆盘全部从A柱移到C柱,最后的盘子一定要移,所以不难给出方案:先把(n-1)个盘子移到B,转化成了子问题((n-1,A,C,B)),再通过一步将(n)这个盘子移到(C),最后再来一次((n-1,B,C,A))。如果要问方案数,那就有(T(n)=2T(n-1)+1),以及(T(1)=1),容易求得(T(n)=2^n -1)

    不过这里值得一提另一种考虑的方式:考虑用一个(n)元组表示每个盘子的位置,例如((a,a,c))就表示最小和次小的盘子在A柱,最大的盘子在C柱。初始状态是((a,a,dots,a)),最终状态是((c,c,dots,c)),每个状态作为一个结点,可以一步到达的两个状态连一条边,

    就会得到形如这样子的图(图源Wikipedia),容易发现其中的分形结构(没错这是一个谢尔宾斯基三角形),然后似乎就可以用这张图来搞一些事情…

    比如一些简单的变形:每次只能在((A,B))或者((B,C))之间移动,全部移到(C)。这样相当于删去了一些边:图中一共有(3^n)个结点(容易证明,原来规则下每个盘子可以到达任意的位置),3个点度数为2,(3^n -3)个点度数为3,总边数是(frac{3}{2}(3^n -1))条,加了这条限制之后相当于少了(1/3)的边(少掉了所有ac之间的边),最后得到一个(|V|=3^n, |E|=3^n-1)的图,同时也能保证这张图联通(考虑原本的一个(k)阶谢尔宾斯基三角形由3个(k-1)阶的小三角形和三条边组成,三条边删去一条边依然联通),于是最后得到的一定是一个(3^n)个点的链,咕最小步数是(3^n)

    以及书上提到的一个变形:改成任意(r)个塔,(n)个盘的情形。塔的增加给我们的操作留了更多的余地,记对应的最小步数为(T(n,r)),这里的递归就不再只是考虑最后一个盘子放到第(r)个塔上了:因为对于(r=3)的时候我们只能这么做,而在这里可以考虑先把(1,2,dots,k)这些盘移动到一个辅助的塔(X)上,再处理剩下的(k+1,dots,n)这些盘,这里一定不能移到(X),也就是只有(r-1)个塔可以用,于是对应的方案是(2T(k,r)+T(n-k,r-1)),对应的答案(egin{aligned}T(n,r)=min_{k=1,dots,n-1}{2T(k,r)+T(n-k,r-1)}end{aligned})

  • 相关阅读:
    [考试反思]0904NOIP模拟测试37:守望
    游戏:最短路,拆点
    [考试反思]0903NOIP模拟测试36:复始
    [考试反思]0902NOIP模拟测试35:摆动
    长寿花:dp
    [考试反思]0901NOIP模拟测试34:游离
    赤壁情:dp
    [考试反思]0829NOIP模拟测试33:仰望
    [考试反思]0828NOIP模拟测试32:沉底
    宅男计划:单峰函数三分
  • 原文地址:https://www.cnblogs.com/yoshinow2001/p/14396676.html
Copyright © 2020-2023  润新知