分治算法(Java)

2023-10-27

想必大家通过算法的名字就已经明白了,这个算法的过程,一个是分,一个是治。那么我为什么要使用这种算法呢?因为当前的问题是我们使用现有的方法是解决不了的,所以我们需要将一个复杂的问题分成两个或者是更多个相同或相似的子问题,然后再一我们已有的方法去解决。因此,我们要先分,再治,最后再合并。

可能大家觉得有一点抽象,这个算法的本质就是我们将复杂的问题简单化使用辅助工具来解决。在这个算法中,我们的工具,那就是递归。
下面我给大家讲解一下这个算法的典型例题汉诺塔。

有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘; 大盘不能叠在小盘上面。 提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。

问:如何移?最少要移动多少次?

在这道题中,我们可以看出,需要将最左边的盘子全部移到最右边,而且要与最左边的盘子保持一样的顺序,那么这里就会体现到我们分治算法的思想,分而治之。而中间的b就是我们解决这道题的重要途径,我们需要利用b来作为一个中间的桥梁。我们拿三个盘子举例子,首先我们需要将第一个盘子放到c上,然后再将第二个盘子放到b上,再将第一个盘子也放到b上,然后将第三个盘子放到c上,然后将第一个盘子放到a上,再将第二个盘子放到c上,再将第一个盘子放到c上。代码如下:

@Test
    public void test(){
        hanNouTower(3,'a','b','c');
    }
    public void hanNouTower(int count,char a ,char b, char c){
        if(count==1){
            System.out.println("第1个盘子从"+a+"移动到了"+c);
        }else{
            hanNouTower(count-1,a,c,b);
            System.out.println("第"+count+"个盘子从"+a+"移动到了"+c);
            hanNouTower(count-1,b,a,c);
        }
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分治算法(Java) 的相关文章

随机推荐

  • 【数据结构-图】1.图的构造和遍历(基本理论+代码)

    一 图的基本概念 图 图G是一个有序二元组 V E 其中V称为顶集 Vertices Set E称为边集 Edges set E与V不相交 它们亦可写成V G 和E G 其中 顶集的元素被称为顶点 Vertex 边集的元素被称为边 edge
  • PI-撒币算法

    首先构造一个单位正方形和一个四分之一圆 然后假设你有一堆硬币 你开始随机对上述构造的正方形 撒币 当然这个硬币可能在圆里 也可能在圆外 只要你的硬币够多 那么你的硬币将构成1 4圆 通过计数其中落入内切圆的硬币的个数 有 如果一共投入a个硬
  • 【微信小程序】创建自定义组件

    文档地址 Component Object object 微信开放文档 视频地址 4 14 自定义组件Component的用法 哔哩哔哩 bilibili 基础 1 右键 gt 创建component文件夹 gt 创建component文件
  • conda虚拟环境安装pytorch+tensorboardX可视化工具

    安装要求 pytorch没有tensorflow那样具有tensorboard可视化工具 在pytorch中想要进行可视化可以调用tensorboardX 具体的调用与tensorboard类似 因此需要的安装包如下 1 pytorch 1
  • 蓝桥杯2022年第十三届JAVA B组省赛真题-最大子矩阵

    这题应该有更简单的方法做 本人太懒 直接暴力线段树 优先队列了 刚好卡时间过 include
  • DSP-滤波器稳定性与极点 &数字滤波器&TMS320C67XX dsp启动过程

    DSP技术 https www cnblogs com kanite category 1318278 html 滤波器稳定性与极点 在数字信号处理种 系统的稳定性是一个很重要的问题 比如说在滤波器的设计种 都要求系统必须稳定 否则是无法实
  • SparkCore

    第1章 RDD概述 1 1 什么是RDD RDD Resilient Distributed Dataset 叫做弹性分布式数据集 是Spark中最基本的数据抽象 代码中是一个抽象类 它代表一个弹性的 不可变 可分区 里面的元素可并行计算的
  • Linux环境开发工具(2)gdb调试工具+Makefile自动化构建工具

    Linux环境开发工具 2 gdb调试工具 Makefile自动化构建工具 Linux编译器 gcc g 使用 程序编译过程 重要概念 函数库 静态库与动态库 gcc选项 gdb使用 具体命令 Makefile 工具 使用过程 项目清理 关
  • 数字藏品是什么?

    有人说 任何东西都可以成为数字藏品 数字藏品是指通过区块链技术生成具有独特身份凭证的数字作品或艺术品 可以通过数字图片 音乐 视频 3D模型 电子门票 数字纪念品等形式进行展示 阿里巴巴 腾讯 京东 百度等互联网公司都推出了数字藏品平台或产
  • PMD使用与代码质量

    最近项目组要求使用PMD工具 通过自定义规则来检查代码 接录部分文档内容如下 PMD介绍 PMD是一种开源分析Java代码错误的工具 与其他分析工具不同的是 PMD通过静态分析获知代码错误 也就是说 在不运行Java程序的情况下报告错误 P
  • python100以内所有偶数-Python3基础 list 推导式 生成100以内的偶数列表

    Python 3 7 0 OS Ubuntu 18 04 1 LTS IDE PyCharm 2018 2 4 Conda 4 5 11 typesetting Markdown code coder Ubuntu source activ
  • Ubuntu系统预处理、编译、汇编、链接指令

    创建并编辑 c程序文件 gedit 1 c 以1 c为例 在编辑器中输入如下代码并保存 include
  • 基础学习5-centos7调整磁盘大小

    1 建立并查看物理磁盘 fdisk l dev sdb Disk dev sdb 10 7 GB 10737418240 bytes 20971520 sectors Units sectors of 1 512 512 bytes Sec
  • 静态Web服务器-命令行启动动态绑定端口号

    学习目标 能够写出获取终端命令行参数动态绑定端口号的web服务器程序 1 开发命令行启动动态绑定端口号的静态web服务器 实现步骤 获取执行python程序的终端命令行参数 判断参数的类型 设置端口号必须是整型 给Web服务器类的初始化方法
  • 2020-02-26

    请教大家一个AD的问题困扰多少的问题 AD10原理图复制一个器件 比如R1 正常复制粘贴还是R1 通过SHIFT拖动是R2 那如果我原理图中原本就有R2了 还是会有重复的现象 怎样复制粘贴会生成一个原理图中没有的位号呢
  • Splunk HEC 取发送数据 服务器的hostname

    1 背景 最近Client 发送数据到 Splunk HEC 发现对方hostname 没有取到 都是HEC 的VIP 地址 这个就不能发现是那个host 发过来的数据 下面查了下文档 发现Splunk 是可以跟踪发送数据的host 的 主
  • 【计算机网络】UDP协议

    目录 1 UDP协议头部格式 2 UDP协议的特点 2 1 无连接 2 2 不可靠 2 3 面向数据报 2 4 有接收缓冲区 没有发送缓冲区 2 5 大小受限 3 基于UDP的应用层协议 4 UDP协议与TCP协议对比 5 经典面试题 1
  • 基于.NET的企业级软件开发

    企业级开发最好基于一些成熟的框架 从而将主要精力集中到领域模型的设计上 1 UI与业务逻辑的隔离 在web领域可以采用ASP NET MVC框架 2 业务逻辑与DB的隔离 可以采用Entity Framework框架 3 业务逻辑中涉及工作
  • 毕业设计-基于机器视觉的水表读数智能识别系统-OpenCV

    目录 前言 课题背景和意义 实现技术思路 一 系统总体方案设计 二 图像预处理的研究与实现 三 识别区域定位及字符分割的研究与实现 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备
  • 分治算法(Java)

    想必大家通过算法的名字就已经明白了 这个算法的过程 一个是分 一个是治 那么我为什么要使用这种算法呢 因为当前的问题是我们使用现有的方法是解决不了的 所以我们需要将一个复杂的问题分成两个或者是更多个相同或相似的子问题 然后再一我们已有的方法