递归之河内塔,汉诺塔问题(婆罗贺摩塔:Tower of Brahma)
来源:互联网 发布:网络外教一对一价格 编辑:程序博客网 时间:2024/05/17 23:26
THE TOWER OF HANOL :河内塔问题
河内塔问题是由法国数学家爱德华·卢卡斯于1883年发明的,给定一个由8个圆组成的塔,这些圆盘按照从大到小递减的方式套在三根桩柱中的一根上。
我们的目的是要将整个塔移动到另一个柱子上,每次只能移动一个圆盘,并且较大的圆盘在移动过程中不能放在较小的圆盘上面。这位伟大的数学家还赋予一个罗曼蒂克传说,即婆罗贺摩塔的传说,具体就不再一一讲述这个故事,若有人想知道可以去自己百度,下面我们开始讨论这个汉诺塔问题:
我们可以规定 T[i] 表示当有i个圆盘,完成时移动的最少次数是T[i];
显而易见:
T[0]=0;
T[1]=1;
T[2]=3;
T[3]=7; 当i=3的时候最好不要心算了,可以模拟一下的
........
首先的我们可以找规律得出:T[i+1]=2*T[i]+1;(只是对于i(0...3)成立),所以我们需要证明一般式,做出有力的推论,高中时就已经学过,证明某个命题对所有满足n>=n0的整数n都成立的一般方法就是数学归纳法,可是这里我们要怎么去归纳呢?很简单,我们只需要对已经推出来的公式做一下变形,即:
以为:T[0]=0;
所以:T[0]+1=1;
因为:T[i+1]=2*T[i]+1;
所以:T[i+1]+1=2*T[i]+2 -> T[i+1]+1 = 2* (T[i]+1)
是不是很熟悉呢?没错就是我们常见的等比数列了,那么我们再回归到原来的序列可以表示为
T[0]=2^0-1=0;
T[1]=2^1-1=1;
T[2]=2^2-1=3;
T[3]=2^3-1=7;
......
T[n]=2^n-1;
然后就开始一波久违的数学归纳吧:
我们先假设T[n-1]=2^(n-1)-1成立; 则T[n] = 2*T[n-1]+1 = 2*(2^(n-1)-1)+1 = 2^n-1
所以我们的推论是正确的,所以当有n个圆盘时,那么最少的移动次数可以直接套这个公式,2^n-1;
我曾经在一本书上看到对于,那个古老的传说:婆罗贺摩塔问题,当n=64的时候,有2^64-1次移动(大约1.8x10^19)
如果按照每微秒移动一次这个不可能实现的速度,也需要5000多个世纪来完成,那么5000个世纪以后人类是否还存在呢......
- 递归之河内塔,汉诺塔问题(婆罗贺摩塔:Tower of Brahma)
- 《具体数学》第一章递归问题之河内塔(THE TOWER OF HANOI)
- 河内之塔(汉诺塔问题--------递归
- 基本的递归问题--河内之塔
- 河内塔问题(Hanoi Tower)
- 河内之塔问题
- 通过河内之塔问题深入理解递归思想
- 汉诺塔问题(河内之塔)
- 汉诺塔||河内之塔
- 用递归思想解决河内塔问题
- 递归解决 Tower of Hanoi 问题
- 河内之塔(Towers of Hanoi)
- 汉诺塔(河内塔)问题
- 河内塔(递归)
- 汉诺塔(河内之塔)
- 河内之塔(汉诺塔)
- 通过河内塔问题来熟悉递归的用法
- 河内之塔(C语言递归实现)
- Windows操作系统下安装MAC OS系统虚拟机
- nginx+keepalived实现高可用
- 30分钟了解php依赖管理工具Composer
- 性能优化:__builtin_expect详解
- 剑指Offer——(37)数字在排序数组中出现的次数
- 递归之河内塔,汉诺塔问题(婆罗贺摩塔:Tower of Brahma)
- hanxindianbing
- 初学者有关Hadoop版本选择的考虑
- Windows快捷键
- python中写入文件数据及文件定位操作命令
- MySQL无限极分类数据表的设计
- Combinations LightOJ
- ST算法学习——POJ3264Balanced Lineup
- Postman使用简介