汉诺塔问题

简介: 汉诺塔问题   最近面试题遇到过汉诺塔的问题,当时竟然懵逼了,不会了!!大学研究的问题竟然都忘光了,于是抓紧捡起来。然而在网上看了看博客,发现非递归算法还真挺多。下面总结了一下。   一、递归算法   1、递归算法优缺点:递归算法算是最易于理解也是最容易实现的,但是对内存的消耗也是巨大的,因为递归需要系统堆栈来保存调用函数地址、形参、局部变量、返回值等数据,也就是回调N次,就要保存N个之前提到的数据。

汉诺塔问题

  最近面试题遇到过汉诺塔的问题,当时竟然懵逼了,不会了!!大学研究的问题竟然都忘光了,于是抓紧捡起来。然而在网上看了看博客,发现非递归算法还真挺多。下面总结了一下。

  一、递归算法

  1、递归算法优缺点:递归算法算是最易于理解也是最容易实现的,但是对内存的消耗也是巨大的,因为递归需要系统堆栈来保存调用函数地址、形参、局部变量、返回值等数据,也就是回调N次,就要保存N个之前提到的数据。但是递归算法结构简洁,清晰。基于这个原因,我先介绍一下递归算法。

  2、递归算法思路:

    1)将N-1个盘子从A柱移动到B柱或者将N-1个盘子从B柱移动到A柱。

    2)将第N个盘子移动到C柱。

代码:

 1 /**
 2      * 
 3      * @param n 需要移动的盘子数
 4      * @param a a柱    这里的abc柱,并不是实际问题中的ABC三个柱子,是动态分析过程中的柱子
 5      * @param b    b柱
 6      * @param c    c柱
 7      */
 8     static void move(int n, char a, char b, char c) {
 9         if (n == 1)
10             System.out.println(a + "-->" + c); // 当只有1个盘子的时候直接将盘子从a柱移动到c柱
11         else {
12             move(n - 1, a, c, b); // 将当前a柱的n-1个盘子,通过c移动到b
13             System.out.println(a + "-->" + c);//将a柱子上的最大的盘子移动到c柱
14             move(n - 1, b, a, c); // n-1个移动过来之后b柱成为a柱,这里就变成了n-1个盘子从b移动到c柱。
15         }
16     }

  二、非递归算法

  这里使用了便利二叉树的思路

  1)算法推论描述:

    这里用4个盘子举例

    进行整合:

  

  2)算法规律:

 

   根据上面的二叉树的图,可以看到如下规率:

 

    A.盘子数(N=二叉树的高度(H

 

    B.第n层序号能被2的(n-1)次方整除,但不能被2的n次方整除(n从下至上增加)

 

    C.每一层的节点数=2的(N-n)次方

 

    D.无论有多少个盘子,每一层的步骤都是相同的,例如:所有的最上面一层都是A->C,第二层也是一样的。

 

    E.每一层都是以A未开始,以C为结束

 

    F.奇数层规律是A->C,C->B,B->A,依次循环

 

    G.偶数层规律是A->B,B->C,C->A,依次循环

 

 

 

  根据上面的特点进行进一步总结得到:

 

    A.第M部层数确定(可以判断循环规律):如果M能被2的(n-1)次方整除,但不能被2的n次方整除,那么,M步处于n

 

    B.第M步在J层的序号确定:K=M除以2的(n-1)次方

 

  3)算法代码:

 

static void hanoi(int m) {
        int c = 1;// 总步骤数
        int n = 1;// 步骤数
        c <<= m;
        for (; n < c; n++) {
            shuchu(m, n);
        }
    }

    private static void shuchu(int m, int n) {
        for (int i = n, y = i % 2, c = m;; i = i / 2, y = i % 2, c--) {
            if (y != 0) {
                switch ((c % 2) * 3 + (i / 2) % 3) {
                case 0:
                    System.out.println("第"+n+"步"+ ":A-B"+"   当前移动的盘子是:"+(m-c+1));
                    break;
                case 1:
                    System.out.println("第"+n+"步"+ ":B-C"+"   当前移动的盘子是:"+(m-c+1));
                    break;
                case 2:
                    System.out.println("第"+n+"步"+ ":C-A"+"   当前移动的盘子是:"+(m-c+1));
                    break;
                case 3:
                    System.out.println("第"+n+"步"+ ":A-C"+"   当前移动的盘子是:"+(m-c+1));
                    break;
                case 4:
                    System.out.println("第"+n+"步"+ ":C-B"+"   当前移动的盘子是:"+(m-c+1));
                    break;
                case 5:
                    System.out.println("第"+n+"步"+ ":B-A"+"   当前移动的盘子是:"+(m-c+1));
                }
                break;
            }
        }
    }

 

相关文章
|
3天前
|
人工智能 自然语言处理 Shell
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
仅用3分钟,百炼调用满血版Deepseek-r1 API,享受百万免费Token。阿里云提供零门槛、快速部署的解决方案,支持云控制台和Cloud Shell两种方式,操作简便。Deepseek-r1满血版在推理能力上表现出色,尤其擅长数学、代码和自然语言处理任务,使用过程中无卡顿,体验丝滑。结合Chatbox工具,用户可轻松掌控模型,提升工作效率。阿里云大模型服务平台百炼不仅速度快,还确保数据安全,值得信赖。
133385 24
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
|
5天前
|
人工智能 API 网络安全
用DeepSeek,就在阿里云!四种方式助您快速使用 DeepSeek-R1 满血版!更有内部实战指导!
DeepSeek自发布以来,凭借卓越的技术性能和开源策略迅速吸引了全球关注。DeepSeek-R1作为系列中的佼佼者,在多个基准测试中超越现有顶尖模型,展现了强大的推理能力。然而,由于其爆火及受到黑客攻击,官网使用受限,影响用户体验。为解决这一问题,阿里云提供了多种解决方案。
16292 37
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
4天前
|
并行计算 PyTorch 算法框架/工具
本地部署DeepSeek模型
要在本地部署DeepSeek模型,需准备Linux(推荐Ubuntu 20.04+)或兼容的Windows/macOS环境,配备NVIDIA GPU(建议RTX 3060+)。安装Python 3.8+、PyTorch/TensorFlow等依赖,并通过官方渠道下载模型文件。配置模型后,编写推理脚本进行测试,可选使用FastAPI服务化部署或Docker容器化。注意资源监控和许可协议。
1242 8
|
13天前
|
人工智能 搜索推荐 Docker
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
DeepSeek R1 + LobeChat + Ollama:快速本地部署模型,创建个性化 AI 助手
3386 117
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
|
8天前
|
人工智能 自然语言处理 API
DeepSeek全尺寸模型上线阿里云百炼!
阿里云百炼平台近日上线了DeepSeek-V3、DeepSeek-R1及其蒸馏版本等六款全尺寸AI模型,参数量达671B,提供高达100万免费tokens。这些模型在数学、代码、自然语言推理等任务上表现出色,支持灵活调用和经济高效的解决方案,助力开发者和企业加速创新与数字化转型。示例代码展示了如何通过API使用DeepSeek-R1模型进行推理,用户可轻松获取思考过程和最终答案。
|
5天前
|
人工智能 自然语言处理 程序员
如何在通义灵码里用上DeepSeek-V3 和 DeepSeek-R1 满血版671B模型?
除了 AI 程序员的重磅上线外,近期通义灵码能力再升级全新上线模型选择功能,目前已经支持 Qwen2.5、DeepSeek-V3 和 R1系列模型,用户可以在 VSCode 和 JetBrains 里搜索并下载最新通义灵码插件,在输入框里选择模型,即可轻松切换模型。
901 14
|
12天前
|
API 开发工具 Python
阿里云PAI部署DeepSeek及调用
本文介绍如何在阿里云PAI EAS上部署DeepSeek模型,涵盖7B模型的部署、SDK和API调用。7B模型只需一张A10显卡,部署时间约10分钟。文章详细展示了模型信息查看、在线调试及通过OpenAI SDK和Python Requests进行调用的步骤,并附有测试结果和参考文档链接。
1904 9
阿里云PAI部署DeepSeek及调用
|
9天前
|
人工智能 数据可视化 Linux
【保姆级教程】3步搞定DeepSeek本地部署
DeepSeek在2025年春节期间突然爆火出圈。在目前DeepSeek的网站中,极不稳定,总是服务器繁忙,这时候本地部署就可以有效规避问题。本文以最浅显易懂的方式带读者一起完成DeepSeek-r1大模型的本地部署。
|
12天前
|
缓存 自然语言处理 安全
快速调用 Deepseek API!【超详细教程】
Deepseek 强大的功能,在本教程中,将指导您如何获取 DeepSeek API 密钥,并演示如何使用该密钥调用 DeepSeek API 以进行调试。

热门文章

最新文章