python汉诺塔算法具体过程(汉诺塔运用什么算法)

python汉诺塔算法具体过程(汉诺塔运用什么算法)汉诺塔玩法如下:

本文目录一览:

汉诺塔怎么玩?

汉诺塔玩法如下:

1、每次只允许一个人移动碟子,且每次仅允许移动一个碟子的位置。

2、在团队所有成员必须依次移动盘子。

3、在任意一次移动中,较小的盘子不得被置于较大的盘子下方。

4、正式开始以后,除移动盘子的队员外,其他队员必须站在培训师规定的距离以外。

5、正式开始以后团队所有成员不得说话,亦不得发出任何带有暗示性的话语。有人出声,将回到原始状态,接着开始。

扩展资料

汉诺塔算法非常简单,当盘子的个数为n时,移动的次数应等于2^n – 1。后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了。

首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放ABC。

若n为奇数,按顺时针方向依次摆放ACB。

1、按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;若圆盘1在柱子B,则把它移动到C;若圆盘1在柱子C,则把它移动到A。

2、接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上。即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘。这一步没有明确规定移动哪个圆盘,你可能以为会有多种可能性,其实不然,可实施的行动是唯一的。

3、反复进行⑴⑵操作,最后就能按规定完成汉诺塔的移动。

汉诺塔的算法

算法介绍:当盘子的个数为n时,移动的次数应等于2^n–1。后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放A、B、C;

若n为奇数,按顺时针方向依次摆放A、C、B。

所以结果非常简单,就是按照移动规则向一个方向移动金片:如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C

汉诺塔问题也是程序设计中的经典递归问题。

扩展资料

由来:

法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的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时,

假如每秒钟一次,共需多长时间呢?一个平年365天有31536000 秒,闰年366天有31622400秒,平均每年31556952秒,计算一下:18446744073709551615秒。

这表明移完这些金片需要5845.54亿年以上,而地球存在至今不过45亿年,太阳系的预期寿命据说也就是数百亿年。真的过了5845.54亿年,不说太阳系和银河系,至少地球上的一切生命,连同梵塔、庙宇等,都早已经灰飞烟灭。

参考资料来源:百度百科-汉诺塔

python汉诺塔算法具体过程(汉诺塔运用什么算法)

python解决汉诺塔问题?

解汉诺塔最简单的做法就是递归:

类似如何将大象装进冰箱:1)将冰箱门打开;2)把大大象放进去;3)把冰箱门关上……

我们将所有的盘都在同一个杆上从大到小排列视为【完美状态】,那么,目标就是将最大盘片为n的完美状态从a杆移到b杆,套用装大象的思路,这个问题同样是三步:

1)把n-1的完美状态移到另一个杆上;

2)把n移到目标杆上;

3)把n-1的完美状态移到目标杆上。

如下:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/23250.html

(0)
上一篇 2023-11-24
下一篇 2023-11-25

相关推荐

  • excel常用函数之截取指定字符

    excel常用函数之截取指定字符本文主要说的是Excel常用的三种截取函数:LEFT、RIGHT、MID。1、LEFT函数(1)定义:从一个文本字符串的第一个字符开始返回指定个数的字符。(2)语法:LEFT(text,[num_chars])text必需。包含要提取的字符的文本字符串。num_chars可选。指定要由LEFT提取的字符的数量。num_chars必须是大于等于0的整数。如果num_chars大于文本长度,则LEFT返回全部文本。如果省略num_chars,则假定其……

    2023-03-02
    137
  • 为什么数据库不应该使用外键[通俗易懂]

    为什么数据库不应该使用外键[通俗易懂]为什么这么设计(Why’sTHEDesign)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。…

    2023-04-01
    132
  • 第03章_基本的SELECT语句「建议收藏」

    第03章_基本的SELECT语句「建议收藏」第03章_基本的SELECT语句 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑诞生,如今,借由这台电脑发展起来的互联网已经自成江湖。在这几十年里,无数的技术、产业在这片江湖

    2023-04-28
    133
  • StoneDB读写分离实践方案「终于解决」

    StoneDB读写分离实践方案「终于解决」在 StoneDB 1.0 版本中,InnoDB 引擎处理 OLTP 的事务型业务,Tianmu 引擎处理 OLAP 的分析型业务。因此,需要在主从复制环境的基础上做读写分离,所有的写操作和部分读操作

    2023-06-09
    114
  • day01-数据库的安装和使用「终于解决」

    day01-数据库的安装和使用「终于解决」Java数据库的安装和使用 1.数据库的作用 一个问题:淘宝网、京东、微信抖音,都有各自的功能,那么我们退出系统的时候,为什么信息还在? 解决之道-文件,数据库 为了解决上诉问题,使用更加利于管理数据

    2023-06-08
    125
  • SparkShuffle机制[通俗易懂]

    SparkShuffle机制[通俗易懂]在早期版本的Spark中,shuffle过程没有磁盘读写操作,是纯内存操作,后来发现效率较低,且极易引发OOME,较新版本的Shuffle操作都加入了磁盘读写进行了改进。 1、未经优化的HashShu

    2023-01-29
    132
  • mysql多字段内容并到单字段中的操作过程_mysql查看字段类型

    mysql多字段内容并到单字段中的操作过程_mysql查看字段类型set @rn=0; SELECT @rn:=@rn+1 序号, ryxm `人员姓名`, cylb `成员类别`, gzdw `工作单位`, zc `职称`, GROUP_CONCAT(zzqmc)

    2022-12-27
    128
  • mysql中的约束_SQL约束

    mysql中的约束_SQL约束Python基础之MySQL数据库 一、约束概述 1、为什么要约束 ​ 为了防止数据库中存在不符合语义规定的数据和防止错误信息的输入、输出造成无效的操作而提出的 ​ 为了保证数据的完整性,SQL规范以

    2023-06-17
    123

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注