(python)经典的数学和逻辑谜题-汉诺塔

前言

        在贝纳雷斯的大寺庙里在标志着世界中心的圆顶下,有一块黄铜板,上面固定着三根钻石针,每根针高一肘,粗细如蜜蜂的身体.在其中一根针上,上帝在创世时放置了六十四个纯金的圆盘,最大的圆盘放在黄铜板上,其他的圆盘逐渐变小,直到最上面的一个.这就是布拉马之塔.日夜不停地,祭司们根据布拉马的固定和不变的法则,将圆盘从一根钻石针转移到另一根针上,值班的祭司每次只能移动一个圆盘,并且必须将该圆盘放在一根针上,使得它下面没有更小的圆盘.当这六十四个圆盘从上帝放置它们的针转移到其他针上时,塔、寺庙和婆罗门都将化为尘土,世界也将随着一声雷鸣而消失.

特点

汉诺塔问题是一个经典的数学和逻辑谜题.

简单而深刻的规则

将所有的圆盘从一个柱子移动到另一个柱子,

在移动过程中必须遵循三个规则:

一次只能移动一个盘子;大盘子不能放在小盘子上面;只能使用汉诺塔原有的三根柱子.

递归结构

计算机科学中经典的递归例子

将大问题分解为小问题,然后通过解决小问题来解决大问题.

数学背景

可以通过数学归纳法证明

解决方法

​​​​
  1. 使用递归算法解决问题(将大问题分解为小问题,然后通过解决小问题来解决大问题)
  2. 数学归纳法 用数学方式进行形式化描述和解决对于具有n个盘子的汉诺塔问题,最少需要移动2^n - 1次。

代码

# 数学归纳法 移动2^n - 1次
def func_hanoi(n):if n == 1:return 1return 2 ** n - 1def hanoi(n, source, target, auxiliary):global move_timemove_time += 1print(hanoi_list)hanoi_list[["A", "B", "C"].index(source)] -= 1hanoi_list[["A", "B", "C"].index(target)] += 1# 递归终止条件if n == 1:# hanoi_list[0] = n# print(hanoi_list)print("Move disk 1 from", source, "->", target)returnhanoi(n - 1, source, auxiliary, target)print("Move disk", n, "from", source, "->", target)hanoi(n - 1, auxiliary, target, source)# 测试
n = 3  # 汉诺塔的盘子数量
move_time = 0
hanoi_list = [n, 0, 0]
hanoi(n, 'A', 'C', 'B')  # 'A'是起始柱子,'C'是目标柱子,'B'是辅助柱子
print(f"last {hanoi_list}")
print(func_hanoi(n))
print(f"移动次数为{move_time}次")

当N为3时,中间的变化过程如下 

[3, 0, 0]
[2, 0, 1]
[1, 1, 1]
Move disk 1 from A -> C
Move disk 2 from A -> B
[0, 1, 2]
Move disk 1 from C -> B
Move disk 3 from A -> C
[0, 2, 1]
[0, 1, 2]
Move disk 1 from B -> A
Move disk 2 from B -> C
[1, 0, 2]
Move disk 1 from A -> C
last [0, 0, 3]
7
移动次数为7

总结

        汉诺塔问题是一个抽象的数学问题. 然后,找到本质的规律时,解决办法却出乎预料的简单.方法是多样的,要么拆解问题,分解成更小,更容易处理的部分;要么总结归纳,发现 它的本质规律.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3032170.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

sqli-labs靶场第十四关

目录 1:分析 找闭合符: 2:开始注入 报错注入: 注入数据库名: 注入表名: 注入列名: 注入具体值: 1:分析 经过我们的实验发现当我们输入的密码后面存在双引号时会报…

消费增值:绿色积分引领电商潮流

消费增值的玩法确实为电商平台提供了一种新颖的用户激励机制,通过积分返利和增值机制,吸引消费者持续参与并提升用户粘性。以下是对您提供的信息的进一步解析和扩展: 消费增值玩法解析 商城消费返利: 每笔消费订单,商…

上海计算机学会2023年9月月赛C++丙组T2Z形填充

题目描述 给定一个整数 n,再给定 n2 个字符,请将这些字符以 z 形排成一个 nn 的矩阵。 z 形的定义是,第一个字符在左上角,然后沿对角线以 z 形放置字符。对于 n4 ,z 形排列的先后顺序标记如下: 输入格式 …

未来办公新方式--智能体与程序完美配合

Agent AI智能体的未来 工作中,有时候我们就像是在不停地踩着缝纫机,重复地做着那些单调乏味的任务,不仅耗时费力,还特别容易出错。可是,咱们现在可是生活在数字化时代啊!这时候,Python编程语言…

STC -PWM

一.STC8H1K16初始化,以下一步配置后就会有波形输出. // // 函数: PWMB_Output_init // 描述: 用户初始化程序. // 参数: None. // 返回: None. // 版本: V1.0, 2020-09-28 //u16 PWM8__setDuty25000;u16 PWM8__setPeriod50000; void PWMB_Output_init(void) {PWMx_InitDefi…

如何让组织充满活力?你需要做好这七步

组织活力,通俗点说就是: 从竞争对手角度看,组织活力强的组织能做到竞争对手做不到的事情; 从客户角度看,组织活力强的组织,客户感受好; 从员工角度看,组织活力强的组织&#xff0c…

Mapreduce | 案例

根据提供的数据文件【test.log】 数据文件格式:姓名,语文成绩,数学成绩,英语成绩 完成如下2个案例: (1)求每个学科的平均成绩 (2)将三门课程中任意一门不及格的学生过滤出来 (1)求每…

抖音小店怎么做?做店笔记分享来了,新手可学习!

大家好,我是电商糖果 抖音小店怎么做?这个问题是所有新手商家都会提问的问题。 很多朋友可能店开好几个月了,一直都不会运营,店铺没有流量,迟迟不出单。 下面糖果就来分享一下我自己做店总结的笔记,新手…

半小时搞懂STM32面经知识点——系统架构与启动流程

1.Cortex-M系统 1.1系统结构 1.处理器核心: Cortex-M3 2.存储器系统: Flash,SRAM,FSMC等 3.总线接口: 核心通过总线接口与外设设备和存储器进行通信。 总线矩阵:总线矩阵是一种硬件结构,用于连…

Java——类与对象

目录 一、面向对象的初步认识 1.1 什么是面向对象 1.2 面向对象与面向过程 二、类的定义与使用 2.1 简单认识类 2.2 类的定义格式 三、类的实例化 3.1 什么是实例化 3.2 类和对象的说明 四、this引用 4.1 为什么要有this引用 4.2 什么是this引用 ​编辑 4.3 this引用…

揭秘全网都在搜索的抖音快速涨10000粉的方法,打造真实粉丝海洋!巨量千川投流

抖音作为当下最热门的社交媒体平台之一,拥有数以亿计的用户。对于许多用户来说,快速涨粉成为了一个追逐的目标。在这篇文章中,我们将揭秘一些全网都在搜索的抖音快速涨粉方法,帮助你打造属于自己的真实粉丝海洋。巨量千川投流&…

决策管理中的数学方法

需要注意的是,用excel求解的时候需要导入线性规划加载项如下: pert分析需要DecisionTools中的RiskSolver插件 1.链接:https://pan.baidu.com/s/1wKhUFWgNmQ7U33kl5AypZw 提取码:zqkn 2.“Palisade_Book_expires_Aril_10_2025.lic”文件复制到以下路径: C:\Program Files …

我必须要吹一波MATLAB 2024a,太牛逼了!|福利:附安装教程及下载地址

最近逛MATLAB官网,发现MATLAB 2024a版本已经Pre-release了,翻了下release note,不得不感叹,实在是太强了! 这次重点更新了四个工具箱: Computer Vision Toolbox Deep Learning Toolbox Instrument Contro…

没有公网ip,如何实现外网访问内网?

目前拨号上网是最广泛的上网方式,这种方式优点是价格便宜,缺点是没有固定公网ip,每次重新您拨号ip地址都会变。如果有一台服务器,需要实现外网访问,在没有固定公网ip的环境下,该如何实现呢?使用…

14.跳跃游戏Ⅱ

文章目录 题目简介题目解答解法一:贪心算法动态规划代码:复杂度分析: 题目链接 大家好,我是晓星航。今天为大家带来的是 跳跃游戏Ⅱ 相关的讲解!😀 题目简介 题目解答 解法一:贪心算法动态规划…

【MySQL 数据宝典】【事务锁】- 002 事务控制的演进

一、事务处理思路 1.1 排队 排队处理是事务管理最简单的方法,就是完全顺序执行所有事务的数据库操作,不需要加锁,简单的说就是全局排队。序列化执行所有的事务单元,数据库某个时刻只处理一个事务操作,特点是强一致性…

用HAL库改写江科大的stm32入门例子8-1 DMA数据转运

实验目的:通过DMA把buffer的数据搬运到buffer2当中 //declare a buffer to store the data uint32_t buffer[3] {1,2,3};//declare a buffer to store the data uint32_t buffer2[3] {0,0,0}; DMA:是个搬运数据的小助手。 相关设置: main…

探索国外静态住宅代理:保护网络安全与隐私的利器

随着互联网的日益发展,网络安全和隐私保护成为越来越多用户关注的焦点。在这个信息爆炸的时代,如何确保网络活动的匿名性和安全性成为了我们必须面对的问题。国外静态住宅代理作为一种新兴的网络技术,为我们提供了有效的解决方案。 &#xf…

接口自动化入门: Requests请求头设置详解!

在进行接口自动化测试时,设置请求头是非常重要的一步。请求头可以包含各种信息,例如身份验证、内容类型、接受语言等。在实际的测试中,我们使用Python的Requests库来发送HTTP请求,并设置请求头来模拟不同的场景和需求。 下面将通…

C#二维数组(矩阵)求伴随矩阵和逆矩阵

程序框架及winform窗体 窗体控件: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Matrix {internal class Algorithm_Gallery{// <summary>/// 计算 A[p,q] 位于 [,]temp 的块辅因子…