首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
devops
服务器
sftp
apache
centos
ftp
ubuntu
路由器
port
sudo
7层
ssh
jenkins
touch
kubectl
负载均衡
centos7
docker
4层
service
curl
fabric
交换机
awk
容器
log4j
grep
shell
vagrant
debian
zsh
运维
syslog
tomcat
linux
tengine
server
dns
grafana
k8s
压力测试
nginx
colors
unix
crontab
stdout
当前位置:
开发笔记
>
运维
> 正文
可视化讲解:什么是汉诺塔问题?
作者:梦里的天真575 | 来源:互联网 | 2023-08-20 12:55
前言概念介绍1.汉诺塔问题起源汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘。上
前言
概念介绍
1. 汉诺塔问题起源
汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘。
上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘,只能移动在最顶端的圆盘。
有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。
当然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在
2.什么是汉诺塔问题?
一句话总结就是:将下图中A柱子上的圆盘依靠一定的规则(该规则在“汉诺塔问题起源”部分已说明)原封不动的移动到C柱子上
原理讲解
下面我们以A柱子上圆盘数N=4为例讲解汉诺塔实现的原理
在初始状态下A,B,C三根柱子上圆盘如下图所示
第一步,我们将A柱最上面3个盘子当作“一个整体”借助(怎么借助呢?)C柱子移动到B柱子上,此时效果如下图所示
第二步,我们将A柱最下面一个盘子移动到
C柱子上,此时效果如下图所示
第三步,我们将B柱3个盘子作为“一个整体”借助(同理,怎么借助呢?)A柱子移动到C柱子上,此时效果如下图所示
经过上面3步操作之后,4层汉诺塔问题就减少为3层(第一步被当作一个整体的3个盘子)汉诺塔问题了。下面我们就来处理3层汉诺塔问题
第四步,我们将A柱最上面2个盘子当作“一个整体”借助C柱子移动到B柱子上,此时效果如下图所示
第五步,我们将A柱最下面一个盘子移动到
C柱子上,此时效果如下图所示
第六步,我们将B柱2个盘子作为“一个整体”借助(同理,怎么借助呢?)A柱子移动到C柱子上,此时效果如下图所示
经过上面3步操作之后,3层汉诺塔问题就减少为2层(第一步被当作一个整体的2个盘子)汉诺塔问题了。下面我们就来处理2层汉诺塔问题
2层汉诺塔的问题相比聪明的你很容易就自己搞定了。在此,我就不赘叙了。
所以,通过上面的步骤,我们很容易发现实现汉诺塔算法可以简单分为三个步骤:
把n-1个盘子由A借助C移到B;
把第n个盘子由A移到C;
把n-1个盘子由B借助A移到C;
效果展示
更多算法学习请关注我的公众号
说明
在公众号中回复“算法源码”即可获取十大经典算法源码
在公众号中回复“算法书籍”即可获取经典入门算法书籍
在公众号中回复“数据结构”即可获取数据结构相关源码
4层
算法
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
service
Android系统架构详解及关闭方法
本文详细介绍了Android系统的四层架构,包括应用程序层、应用框架层、库与Android运行时层以及Linux内核层,并提供了如何关闭Android系统的步骤。 ...
[详细]
蜡笔小新 2024-11-19 09:04:28
service
Excel技巧:单元格中显示公式而非结果的解决方法
本文探讨了在Excel中如何通过简单的方法解决单元格显示公式而非计算结果的问题,包括使用快捷键和调整单元格格式两种方法。 ...
[详细]
蜡笔小新 2024-11-23 18:06:16
service
Swift Closure与Objective-C Block的对比分析
本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ...
[详细]
蜡笔小新 2024-11-23 17:41:01
service
新型量子内核助力机器学习分类
国际科研团队开发出一种创新的量子机器学习分类方法,利用非线性量子内核显著提升了分类精度,为未来量子计算技术的发展开辟了新路径。 ...
[详细]
蜡笔小新 2024-11-23 17:36:25
service
如何寻找程序员的兼职机会
随着远程工作的兴起,越来越多的程序员开始寻找灵活的兼职工作机会。本文将介绍几个适合程序员、设计师、翻译等专业人士的在线平台,帮助他们找到合适的兼职项目。 ...
[详细]
蜡笔小新 2024-11-23 16:41:08
service
iOS开发中的UIView及其子类应用
本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ...
[详细]
蜡笔小新 2024-11-23 16:25:09
service
线性表中的元素删除算法
本文探讨了线性表中元素的删除方法,包括顺序表和链表的不同实现策略,以及这些策略在实际应用中的性能分析。 ...
[详细]
蜡笔小新 2024-11-23 16:14:36
service
Python网络编程:深入探讨TCP粘包问题及解决方案
本文详细探讨了TCP协议下的粘包现象及其产生的原因,并提供了通过自定义报头解决粘包问题的具体实现方案。同时,对比了TCP与UDP协议在数据传输上的不同特性。 ...
[详细]
蜡笔小新 2024-11-23 15:55:15
service
汇编语言标识符和表达式(四)(表达式与符号定义语句)
7、表达式表达式是程序设计课程里的一个重要的基本概念,它可由运算符、操作符、括号、常量和一些符号连在一起的式子。在汇编语言中,表达式分为:数值表达式和地址表达式。(1)进制伪指令R ...
[详细]
蜡笔小新 2024-11-23 15:31:08
service
提升.NET基础技能的有效策略
对于非计算机专业背景的开发者而言,如何快速掌握.NET基础知识以应对技术面试是一个挑战。本文将提供一系列实用建议,帮助读者在短时间内提高.NET基础水平。 ...
[详细]
蜡笔小新 2024-11-23 14:24:59
service
计算数值平方根的方法与实现
本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ...
[详细]
蜡笔小新 2024-11-23 13:50:24
service
P3796 AC自动机强化版题解 - Aho-Corasick Algorithm
本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ...
[详细]
蜡笔小新 2024-11-23 13:17:52
service
全面覆盖的前端技术资源大全
本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ...
[详细]
蜡笔小新 2024-11-23 12:05:53
service
达梦数据库(DM7)中实现两表联接更新的方法
本文介绍了在达梦数据库(DM7)中通过两种方法实现两表之间的联接更新操作,包括使用子查询的更新语句和MERGE语句的具体应用。 ...
[详细]
蜡笔小新 2024-11-23 11:48:24
4层
视觉Transformer综述
本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ...
[详细]
蜡笔小新 2024-11-22 19:53:16
梦里的天真575
这个家伙很懒,什么也没留下!
Tags | 热门标签
devops
服务器
sftp
apache
centos
ftp
ubuntu
路由器
port
sudo
7层
ssh
jenkins
touch
kubectl
负载均衡
centos7
docker
4层
service
curl
fabric
交换机
awk
容器
log4j
grep
shell
vagrant
debian
RankList | 热门文章
1
Linux内存的使用
2
数据库编程Mysql中的管理用户
3
源码分析之View的工作流程
4
51汇编指令集
5
饭卡 (背包01) http://acm.hdu.edu.cn/showproblem.php?pid=2546
6
简单的jspservlet 购物车项目
7
python安卓吾爱_python调用adb脚本来实现群控安卓手机初探
8
linux环境下c++实现简单的protobuf调用
9
Git命令_常用git命令备忘录,开发者必备
10
完成一半题目<leetcode>
11
一道简单的题目
12
098在屏幕中实现一个检索框效果
13
怎么取消添加到Xcode工程里的第三方插件?
14
深度学习:convolution(卷积)
15
LSDYNA 重启动分析
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有