《河内塔问题》PPT
- 格式:ppt
- 大小:1.61 MB
- 文档页数:2
小学数学讲题稿河内塔问题浏阳市新文学校周小芬大家上午好,今天我的讲题内容是河内塔问题。
如图所示:有编号为1、2、3号的三根杆子,在1号杆上有呈金字塔状排列的三颗珠子,你能借助2号把1号杆上的珠子移到3号杆而不改变珠子的上下顺序吗?最少移动多少次?移动规则如下:(1)每次只能移动一颗珠子;(2)大珠子不能放到小珠子上面。
如果A杆上有4个珠子呢?至少移动多少次?一、题目分析河内塔问题源于印度的一个神话,本题动手操作性和综合性强,学生不容易根据题目中的已知条件和问题,找到解题方法。
因此我的教学思路是:1.认真分析题目条件和要求。
2.让学生边操作边思考,并做好记录,逐步总结出规律和方法。
3.一题多解,发散思,拓展延伸。
在学生动手操作之前,先强调操作的要求:1、不改变上下顺序;2、保证移动次数的最少;3、隐藏的已知条件是:1、2、3号杆都可以作为珠子的临时中转杆;约束条件是:中转杆上的珠子必须保持金字塔状。
二、由学生容易进入的误区探究出珠子移动次数最少的规律(题目的已知条件中要求借助2号杆,那么学生很容易理解成只能用2号杆作为中转,所以会在每次移动时先将最上面的那颗最小的珠子移入2号杆,但是,这样移动,能保证是最少的移动次数吗?)给学生足够的操作探究的时间,让不同层次的学生尝试用自己的方法去解决这个问题。
全班交流,会出现大致以下情况:1、每次都先将最小珠移至2号杆,导致部移动次数不都是最少。
2、有学生举棋不定,无从入手。
3、有学生会将珠子在三根杆上来回移动,重复多次。
4、有学生将珠子移入中转杆时,顺序颠倒。
5、有学生会总结出最少移动次数的操作方法。
6、其他。
比较结果,得出最优策略,结果如下:结果如下探究出珠子移动次数最少的规律:1、1号杆珠子为单数,最小珠先移入3号杆中转2、1号杆珠子为双数,最小珠先移入2号杆中转三、发现规律,拓展升华根据所得出的结果找出河内塔问题的最终规律:利用递推法,根据前一项和后一项珠子移动的最少次数,递推出它的规律是:后一项珠子移动次数是前一项的2倍多1;根据珠子移动的最少次数,发现它组成了一个规律为2的n次方减1的数列。
河内塔游戏活动目标:1.本活动以河内塔做为媒介,从“玩”入手,让学生在“玩”的过程中,体会最佳策略,初步感受递推法解决实际问题的方法。
2.能用有条理的、清晰的语言阐述自己的想法,学会用简单的方式记录活动过程3.培养学生的观察、分析、比较,综合思考能力。
活动材料:河内塔玩具、活动单活动过程:活动一:(初步感知尝试把玩)1.师:出示河内塔玩具谈话:今天老师给大家带来了一个玩具,见过吗?你知道这个玩具叫什么吗?课题:“河内塔”想知道这个玩具怎么玩吗?2.(课件出示游戏玩法)任务:将一根柱上的圆盘全部移动到另一根柱上。
规则:1.每次只能移动一个盘子,只能在3个柱子之间移动;2.移动过程中,小盘子一定要放在大盘子的上面,不可颠倒;3.读一读,问:谁看懂了游戏规则,和大家说一说。
4.在学生介绍的基础上老师结合操作介绍游戏规则问:你想玩吗?那我们也来玩一玩。
老师给你3分钟时间,请边玩边注意这个游戏的规则。
(完好后把盘放回信封)5.你知道吗,很多的数学家都研究过这个游戏。
关于它还有一个古老传说,想不想听听。
传说印度教的主神梵天在创造世界的时候,在一块黄铜板上插着三根宝石针,并且在其中一根针上从下到上地穿好了由大到小的64片金片,不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。
僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声巨响中灭亡……师:传说中的河内塔上只有64个盘子,按照上面的规则移动完成后,我们的世界怎么可能灭亡呢?这中间究竟蕴含了什么样的奥秘呢?今天我们也来研究一下河内塔,揭开这个古老传说中的奥秘吧。
这个河内塔上有64个金环,要是直接移动是不是有些麻烦,那你想从几个开始?7.在学生回答的基础上小结:对于复杂的问题,我们可以从它最简单的形式开始研究,在研究的过程中找到规律就好办了。
活动二:一盘游戏(学生说一说,教师简单演示过程)活动三:二盘游戏1.学生分组活动,两人一组轮流玩。
附件3:小课题封面格式序号2014年温州市小学数学小课题评比学校:温州市瓯海实验小学南瓯校区成员姓名:陈奥小课题题目:河内塔游戏探秘指导教师:季迅群河内塔游戏探秘一、提出问题曾经在数学书上有个叫“河内塔问题”数学游戏。
它就是由三个杆子,分别是1号杆,2号杆和3号杆,1号杆上有三颗珠子,是从小到大排列的。
这个问题引起了我的兴趣,于是,我对河内塔游戏产生了浓厚的兴趣,去查找了资料,了解到:它源自古印度神庙中的一段故事。
传说在古老的印度一座庙宇中放置了一块上面插有三根长木钉的木板,在其中的一根木钉上,从上至下被放置了64片直径由小至大的圆环形金属片。
古印度教的天神指示他的僧侣们将64片的金属片移至三根木钉中的其中一根上。
规定在每次的移动中,只能搬移一片金属片,并且在过程中必须保持金属片由上至下是直径由小至大的次序,直到有一天,僧侣们能将64片的金属片依规则从指定的木钉上全部移动至另一根木钉上,那么,世界末日即随之来到,世间的一切终将被毁灭。
二、展开探索1.探索(一)三颗珠子三根杆子的游戏三颗珠子的移动挺简单的,但要注意的是:为了做到移动次数最少,第一次移动必须把最小的珠子移动到最后一个柱子。
如果移动到第2个柱子上,虽然最后也能完成任务,但是就达不到“移动次数最少”的要求。
详细移动过程如下:第一次移动第二次移动第三次移动第四次移动第五次移动第六次移动第七次移动2.探索(二) 四颗珠子三根杆子的游戏四颗珠子能不能移呢?我尝试了几次,最下面的一颗珠子好像没有办法拿出来。
但后来灵机一动:如果把上面三颗珠子先用刚才的方法移到其他柱子上。
不就可以拿起最下面的一颗珠子了嘛!经过尝试,我发现:三颗珠子先用刚才的方法移到第2号柱子上步骤是最少的。
一共需要15次。
步骤具体如下:第一次移动第二次移动第三次移动第四次移动第五次移动第六次移动第七次移动第八次移动第九次移动第十次移动第十一次移动第十二次移动第十三次移动第十四次移动第十五次移动移动中,我发现:在这十五次里,有七次是上面的三颗珠子移到2号杆上,有一次是把最大的珠子移到3号杆上,剩下的七次是把2号杆上的三颗珠子移到3号杆上的最大珠子上面。
【算法】汉诺塔问题汉诺塔问题是⼀个经典的问题。
汉诺塔(Hanoi Tower),⼜称河内塔,源于印度⼀个古⽼传说。
⼤梵天创造世界的时候做了三根⾦刚⽯柱⼦,在⼀根柱⼦上从下往上按照⼤⼩顺序摞着64⽚黄⾦圆盘。
⼤梵天命令婆罗门把圆盘从下⾯开始按⼤⼩顺序重新摆放在另⼀根柱⼦上。
并且规定,任何时候,在⼩圆盘上都不能放⼤圆盘,且在三根柱⼦之间⼀次只能移动⼀个圆盘。
问应该如何操作?当只有⼀个盘⼦时这是最简单的情况:只需将1号盘⼦从X塔移动到Z塔就OK于是我们可以写出如下的函数,来模拟完成这个过程。
假设盘⼦是⽤1,2,3...按照⼤⼩编码代表的,⽽塔则是⽤⼀个字符char表⽰的。
//将编号为 number 的盘⼦从 from 塔座移到 to 塔座void move(int number , char from , char to){std::cout<<"move dish "<<number<<": "<<from<<"--->"<<to<<std::endl;}有两个盘⼦时有2个盘⼦,⽬标是:将X塔上的盘⼦借助Y移动到Z盘⼦上。
特别的,为了好描述,我把X塔叫做源塔,因为盘⼦起初在这个塔上,把Y塔叫做辅助塔,因为Y塔只是起个过渡作⽤。
把Z盘叫做⽬标塔,最后所以的盘⼦都在这个塔上。
我们可以写出伪代码move(1,X,Y);move(2,X,Z);move(1,Y,Z);有三个盘⼦时在盘⼦数⼤于2的时候,⽆论有多少个盘⼦,我们眼⾥只有2个盘⼦:即最底层的最⼤的盘⼦,和它上⾯的所有盘⼦组和形成的⼀个盘,我们可以把它看做是2.5号盘。
这样考虑的好处是:⽆论有多少盘⼦,都可以⽤2个盘⼦的思路去做。
简化了思路。
因此,步骤是:1、将2.5号盘借助Z塔移动到Y塔上。
注意,处理这步操作时,X是源塔,Z是辅助塔,Y是⽬标塔2、将3盘移动到Z塔上,3、将2.5盘借助X塔移动到Z塔上。
一、引言河内塔实验,又称为汉诺塔问题,起源于印度一个古老的传说。
该问题是一个经典的递归问题,也是认知心理学中研究问题解决策略的典型实验。
河内塔实验通过模拟将圆盘从一根柱子移动到另一根柱子的过程,来探讨人类问题解决过程中的思维策略和决策能力。
二、实验原理1. 实验背景河内塔问题由三根柱子和若干个大小不同的圆盘组成。
在实验开始时,所有圆盘按照从小到大的顺序依次放在第一根柱子上,构成一个金字塔状。
实验的目标是将所有圆盘按照原来的顺序移动到第三根柱子上,且在移动过程中,每次只能移动最上面的一个圆盘,且大圆盘不能放在小圆盘上面。
2. 实验目的(1)了解被试在解决河内塔问题时所用的思维策略。
(2)研究口头报告对思维的影响。
(3)探讨人类在问题解决过程中的认知过程。
3. 实验方法(1)被试:选取一定数量的被试,要求其完成河内塔实验。
(2)实验材料:河内塔实验装置,包括三根柱子和若干个大小不同的圆盘。
(3)实验步骤:①将圆盘按照从小到大的顺序依次放在第一根柱子上,构成金字塔状。
②要求被试将所有圆盘按照原来的顺序移动到第三根柱子上。
③在实验过程中,记录被试的移动次数、用时和策略。
④在实验结束后,对被试进行口头报告,了解其思维过程。
4. 实验结果与分析(1)被试在解决河内塔问题时,通常会采用以下策略:①递归法:将问题分解为更小的子问题,逐步解决。
②记忆法:通过记忆已解决的子问题,来推测如何解决当前问题。
②试错法:通过不断尝试和错误,寻找解决问题的方法。
(2)口头报告显示,被试在解决问题过程中,会经历以下认知过程:①发现问题:意识到需要将所有圆盘移动到第三根柱子上。
②分析问题:分析问题结构,找出问题的约束条件。
③制定解决方案:根据问题结构,制定解决问题的步骤。
④实施解决方案:按照制定的步骤,将所有圆盘移动到第三根柱子上。
⑤评价结果:评估解决问题的效果,分析存在的问题。
5. 结论河内塔实验是一种有效的研究问题解决策略和认知过程的实验。
汉诺塔百科名片汉诺塔初始状态汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。
上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。
上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
目录由来汉诺塔与宇宙寿命concreteHAM:汉诺塔问题的程序实现由来汉诺塔与宇宙寿命concreteHAM:汉诺塔问题的程序实现展开编辑本段由来来源汉诺塔是源自印度神话里的玩具。
上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。
上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
传说在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。
印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。
不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。
僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
不管这个传说的可信度有多大,如果考虑一下把64片金片,由一根针上移到另一根针上,并且始终保持上小下大的顺序。
这需要多少次移动呢?这里需要递归的方法。
假设有n片,移动次数是f(n).显然f(1)=1,f(2)=3,f(3)=7,且f(k+1)=2*f(k)+1。
此后不难证明f(n)=2^n-1。
n=64时,f(64)= 2^64-1=18446744073709551615假如每秒钟一次,共需多长时间呢?一个平年365天有31536000 秒,闰年366天有31622400秒,平均每年31556952秒,计算一下,18446744073709551615/31556952=584554049253.855年这表明移完这些金片需要5845亿年以上,而地球存在至今不过45亿年,太阳系的预期寿命据说也就是数百亿年。
Hanoi塔问题Hanoi塔问题是法国数学家Edouard Lucas于1883年提出来的。
传说有一个东方庙宇(一说为印度,一说为越南)开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为过渡,但每次只能搬一个,而且大的不能放在小的上面。
移动圆片的总次数等于2的64次方再减1=18446744073709551615,如果按照最快每秒钟搬动1片的话,就算昼夜不停地干,要花多少时间?1年有365x24x60x60=31536000秒。
所以共需5849亿年!看来,众僧们耗尽毕生精力也不可能完成金片的移动。
这个问题今天已经成为程序设计中的经典的函数递归调用问题。
此外,还有Hanoi塔电子游戏。
一、需求分析⒈本实验要求4个盘子移动,输出中间结果:三个盘子的图为:三个盘子汉诺塔算法的运行轨迹为:Hanio 算法如下:1 void Hanoi (int n, char A, char B, char C ) //第一列为语句行号2 {3 if (n==1) Move (A, C ); //Move 是一个抽象操作,表示将碟子从A 移到C 上4 else {5 Hanoi (n -1, A, C, B );6 Move (A, C );7 Hanoi (n -1, B, A, C );8 }9 }解释:三根柱子x,y,z.其中x 上有n 个直径递增的圆盘(最顶为最小,然后往下一次增大),现在要把x 上的n 个圆盘移到z 上,要求在移动的过程中不允许出现任何大的圆盘叠放在任何小的圆盘上,柱y 可作中转用).如果柱x 上只有一个圆盘 if(n==1),那么只需要将x 上的这一个圆盘移到z 上即可.程序中的 printf("%c-->%c\n",x,z); 就是把移动的方向打印出来显示在屏幕上.否则(即柱上X 上有不止一个圆盘)else { move(n-1,x,z,y); printf("%c-->%c\n",x,z); move(n-1,y,x,z); }我们先把柱x 上 最上面的(n-1)个圆盘移到柱y(记住柱y 本来就是作中转用的) 上(先不要去深究这n-1个圆盘怎么移得到柱y 上,假设能办到), move(n-1,x,z,y); 注 意此时我们的x,y,z 的角色变了.我们要从x 上移动圆盘到y 上了.你不妨这样标记一 下move 形参 move(圆盘数,来源柱,中转柱,目标柱).就是说现在x 的角色是来源柱,y 的角色是目标柱,我们要把x 上的n-1个圆盘移到y 上.⑸ ⑼ ⑶ Hanio(3,A,B,C) Hanio(3,A,B,C) Hanio(2,A,C,B) Hanio(2,A,C,B) Hanio(1,A,B,C) Hanio(1,A,B,C) Move (A,C) Move (A,B) Hanio(1,C,A,B) Hanio(1,C,A,B) Move (C,B) Move (A,B)Hanio(2,B,A,C) Hanio(2,B,A,C) Hanio(1,B,C,A) Hanio(1,B,C,A) Move (B,C) Hanio(1,A,B,C) Hanio(1,A,B,C) Move (A,C) Move (B,A) 递归第一层 递归第二层 递归第三层 ⑴ ⑵ ⑷⑹ ⑺ ⑻ ⑽⑾ ⑿ ⒀ ⒁这一步完成之后,我们就该把剩在柱x上的那个最大的圆盘移到柱z上了.printf("%c-->%c\n",x,z);现在我们的状态是最大的圆盘已经在z上,其余的n-1个在y上,x上没有圆盘.我们在交换一下x,y,z的角色: move(n-1,y,x,z); 对照move(圆盘数,来源柱,中转柱,目标柱), 我们要把y上剩余的n-1个圆盘移到z上. 自此,n个圆盘全都从x上移到了z上.以此类推,四个盘子的Hanoi塔的问题也是如此解决。