分治算法——汉诺塔

介绍

  1. 分治算法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题···直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅里叶变换(快速傅里叶变换)···
  2. 分治算法可以求解的一些经典问题
    • 二分搜索
    • 大整数乘法
    • 棋盘覆盖
    • 合并排序
    • 快速排序
    • 线性时间选择
    • 最接近点对问题
    • 循环赛日程表
    • 汉诺塔

基本步骤

分治法在每一层递归上都有三个步骤:

  1. 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题
  2. 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题
  3. 合并:将各个子问题地解合并为原问题的解

分治算法最佳案例-汉诺塔

思路分析

  1. 如果是有一个盘 A->C
  2. 如果有 n >= 2 的情况,我们总是可以看作是两个盘:最下边的盘和上边的盘
    1. 先把最上面的盘 A->B
    2. 把最下边的盘 A->C
    3. 把 B 塔所有的盘 B->C

代码演示

package com.crisp.Algorithm;public class HanoiTower {public static void main(String[] args) {hanoitower(5,'A','B','C');}/*** 汉诺塔的移动方法->使用分治算法* @param num 汉诺塔的层数* @param a 汉诺塔初始所在位置* @param b 汉诺塔中转位置* @param c 汉诺塔最终位置*/public static void hanoitower(int num, char a, char b, char c){//如果只有一个盘if(num == 1){System.out.println("第1个盘从 "+ a +"->"+ c);}else{//如果有 n >= 2 的情况,我们总是可以看着做是两个盘//1、先把最上面所有盘 A->B,移动过程会用到Chanoitower(num - 1,a,c,b);//2、把最下边的盘 A->CSystem.out.println("第"+ num +"个盘从 "+ a +"->"+c);//3、把 B 塔的所有盘 B->C,移动过程要用到A塔hanoitower(num - 1,b,a,c);}}
}

分治算法——汉诺塔(HanoiTower)相关推荐

  1. 三十三、分治算法---汉诺塔问题

    一.分治算法的介绍 分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或 相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以 ...

  2. 分治算法---汉诺塔

    思路分析 代码实现 package com.atguigu.dac;public class Hanoitower {public static void main(String[] args) {h ...

  3. 二分查找、分治算法——汉诺塔问题

    一.二分查找算法(非递归) 1)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后在进行查找 2)二分查找算法的运行时间为对数时间,即查找到需要的目标位置最多只需要log以2为 ...

  4. 分治算法(汉诺塔游戏)

    分治算法 分治算法就是将原问题分解成n个规模较小,并且结构与原问题相似的子问题,再去递归地解决这些子问题,然后这些子问题,然后再合并其结果,就可以得到原问题的解. 分治算法的递归实现,每一层递归都会涉 ...

  5. hanoi java_java算法汉诺塔(hanoi)

    [实例简介]java算法汉诺塔(hanoi) [核心代码] public class Hanoi { /** * Hanoi塔问题 */ public static void main(String[ ...

  6. 玩游戏写算法——汉诺塔

    玩了个汉诺塔的flash游戏,总结下算法 四五层就不说了,太长,4层要15步,每步一截屏就刷死了,其实要想归纳出规律,最好还是玩四五层看看,多了才出规律. 上小下大,一个压一个,想把最底下的第 n 个 ...

  7. 算法 汉诺塔-java详解

    第一次看到这个算法时,很懵逼,是在栈那里.想了半天没想到半点跟栈有关系的解法.最后看了答案,是用的递归.但是看了答案还是很懵逼,下面就是博主自己对汉诺塔的一些了解. 有三根木桩,第一根上有n个盘子,最 ...

  8. 数据结构与算法 汉诺塔问题和列车车厢重排问题

    1. 汉诺塔问题: (a)通过递归的方式解决:https://blog.csdn.net/zj1131190425/article/details/85156570 // 汉诺塔问题: 递归解决方案 ...

  9. 算法自我分析——汉诺塔算法

    汉诺塔算法 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小 ...

最新文章

  1. 分析6千万条GitHub帖子,发现你的工作状态与表情符号强相关
  2. 记:返回方法参数的值(或多个值),
  3. 翻译:MariaDB DATABASE()
  4. php 可以做pc客户端吗,vue.js能做pc端吗
  5. github使用_一文轻松学会GitHub的使用
  6. hdu 3006(状态压缩)
  7. Spring Boot 注解配置文件自动映射到属性和实体类
  8. Oracle 字符串函数
  9. 小学数学加减法测试软件,小学生数学加减测试题
  10. Apache-不重启完成添加或更改域名
  11. C++工作笔记-对继承的进一步认识
  12. 20145107 《Java程序设计》第四次实验报告
  13. mysql不显示默认密码_免安装版mysql不出现默认密码状况(基于mysql8.0)
  14. netty 异常 did not read anything but decoded a message
  15. 网页设计常用色彩搭配表
  16. Linux内核参考链接与书籍
  17. QueryList一个基于phpQuery的无比强大的采集工具
  18. php 页面日历形式显示,日历页面展示-PHP制作阴阳历转换的日历插件-PHP中文网教程...
  19. App逆向 Frida - 夜神模拟器安装配置 基本使用
  20. DrLLPS (相分离数据库): 第一个注释全面的液液相分离相关蛋白质数据库 (liquid-liquid phase separation database)

热门文章

  1. 滴滴用户精细化运营实战(上)
  2. JAVA设计模式—装饰者模式笔记
  3. 达梦中级部分笔记(自用)
  4. 《Web前端设计与开发-HTML+CSS+JavaScript+HTML 5+jQuery》-漫步时尚广场代码-1
  5. 生信软件 | bowtie2(测序序列与参考序列比对)
  6. prometheus被OOM杀死
  7. 分布式系统水平和垂直拆分
  8. 【文本聚类】一篇文章弄懂三种聚类算法(K-Means,Agglomerative,DBSCAN)
  9. 适合计算机系的毕业横幅口号 掉发,2017年雷人创意的毕业横幅标语
  10. SQL联合查询--理论知识