首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
docker
zsh
colors
4层
log4j
grep
centos7
路由器
cron
负载均衡
压力测试
linux
server
unix
jenkins
k8s
kubectl
curl
crontab
syslog
service
vagrant
centos
tengine
sftp
ssh
awk
ftp
运维
dns
grafana
服务器
debian
ubuntu
shell
nginx
stdout
apache
touch
sudo
tomcat
7层
fabric
port
容器
devops
当前位置:
开发笔记
>
运维
> 正文
可视化讲解:什么是汉诺塔问题?
作者:梦里的天真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层
算法
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
算法
深入理解KMP算法中的next数组:北大OJ 2406题解
本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ...
[详细]
蜡笔小新 2024-12-28 11:30:01
算法
优化ListView性能
本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ...
[详细]
蜡笔小新 2024-12-28 10:36:30
算法
Understanding Life: A Forward-Living, Backward-Reflecting Paradox
Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ...
[详细]
蜡笔小新 2024-12-28 10:17:59
路由器
计算机网络复习:第五章 网络层控制平面
本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ...
[详细]
蜡笔小新 2024-12-27 22:54:11
路由器
Go语言基础:Hello World 实践
本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ...
[详细]
蜡笔小新 2024-12-27 21:29:35
路由器
线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ...
[详细]
蜡笔小新 2024-12-27 20:47:55
路由器
HDFS与Hive中的数据存储和管理机制
本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ...
[详细]
蜡笔小新 2024-12-27 20:21:48
service
新浪笔试题
1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ...
[详细]
蜡笔小新 2024-12-27 19:32:17
service
C++实现经典排序算法
本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ...
[详细]
蜡笔小新 2024-12-27 19:25:14
service
使用动态规划算法求解0-1背包问题
本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ...
[详细]
蜡笔小新 2024-12-27 19:17:15
server
深入理解设计模式与七大原则
本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ...
[详细]
蜡笔小新 2024-12-27 19:10:10
service
Java并发编程:LinkedBlockingQueue的实际应用
本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ...
[详细]
蜡笔小新 2024-12-27 18:51:49
service
USACO 2014 Jan - Moolympics区间记录优化算法
题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ...
[详细]
蜡笔小新 2024-12-27 18:14:31
service
深入理解C++中的KMP算法:高效字符串匹配的利器
本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ...
[详细]
蜡笔小新 2024-12-27 14:45:30
service
LeetCode 991:故障计算器的最优解法
探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ...
[详细]
蜡笔小新 2024-12-27 14:34:44
梦里的天真575
这个家伙很懒,什么也没留下!
Tags | 热门标签
docker
zsh
colors
4层
log4j
grep
centos7
路由器
cron
负载均衡
压力测试
linux
server
unix
jenkins
k8s
kubectl
curl
crontab
syslog
service
vagrant
centos
tengine
sftp
ssh
awk
ftp
运维
dns
RankList | 热门文章
1
人类传说中的吸血鬼种族的由来与发展
2
好听的彩铃铃声
3
接口与抽象类概念
4
com.google.common.collect.ImmutableList.copyFromCollection()方法的使用及代码示例
5
DB2 purescale VS Oracle的RAC
6
源码解析Nacos配置中心
7
《Effective STL》学习笔记:深入理解STL(第三部分)
8
Dreamweaver 支持Jquery智能提示
9
一个完整的HTTPS请求过程
10
开发笔记:Memcached高性能内存对象缓存系统
11
Liunx下Maven私服的搭建
12
mysql asyn,mysql asyn 实战
13
一句话shell命令
14
golang google authenticator totp代码
15
求职在长沙
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有