分治算法——汉诺塔(HanoiTower)
分治算法——汉诺塔
介绍
- 分治算法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题···直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅里叶变换(快速傅里叶变换)···
- 分治算法可以求解的一些经典问题
- 二分搜索
- 大整数乘法
- 棋盘覆盖
- 合并排序
- 快速排序
- 线性时间选择
- 最接近点对问题
- 循环赛日程表
- 汉诺塔
基本步骤
分治法在每一层递归上都有三个步骤:
- 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题
- 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题
- 合并:将各个子问题地解合并为原问题的解
分治算法最佳案例-汉诺塔
思路分析
- 如果是有一个盘 A->C
- 如果有 n >= 2 的情况,我们总是可以看作是两个盘:最下边的盘和上边的盘
- 先把最上面的盘 A->B
- 把最下边的盘 A->C
- 把 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)相关推荐
- 三十三、分治算法---汉诺塔问题
一.分治算法的介绍 分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或 相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以 ...
- 分治算法---汉诺塔
思路分析 代码实现 package com.atguigu.dac;public class Hanoitower {public static void main(String[] args) {h ...
- 二分查找、分治算法——汉诺塔问题
一.二分查找算法(非递归) 1)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后在进行查找 2)二分查找算法的运行时间为对数时间,即查找到需要的目标位置最多只需要log以2为 ...
- 分治算法(汉诺塔游戏)
分治算法 分治算法就是将原问题分解成n个规模较小,并且结构与原问题相似的子问题,再去递归地解决这些子问题,然后这些子问题,然后再合并其结果,就可以得到原问题的解. 分治算法的递归实现,每一层递归都会涉 ...
- hanoi java_java算法汉诺塔(hanoi)
[实例简介]java算法汉诺塔(hanoi) [核心代码] public class Hanoi { /** * Hanoi塔问题 */ public static void main(String[ ...
- 玩游戏写算法——汉诺塔
玩了个汉诺塔的flash游戏,总结下算法 四五层就不说了,太长,4层要15步,每步一截屏就刷死了,其实要想归纳出规律,最好还是玩四五层看看,多了才出规律. 上小下大,一个压一个,想把最底下的第 n 个 ...
- 算法 汉诺塔-java详解
第一次看到这个算法时,很懵逼,是在栈那里.想了半天没想到半点跟栈有关系的解法.最后看了答案,是用的递归.但是看了答案还是很懵逼,下面就是博主自己对汉诺塔的一些了解. 有三根木桩,第一根上有n个盘子,最 ...
- 数据结构与算法 汉诺塔问题和列车车厢重排问题
1. 汉诺塔问题: (a)通过递归的方式解决:https://blog.csdn.net/zj1131190425/article/details/85156570 // 汉诺塔问题: 递归解决方案 ...
- 算法自我分析——汉诺塔算法
汉诺塔算法 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小 ...
最新文章
- 分析6千万条GitHub帖子,发现你的工作状态与表情符号强相关
- 记:返回方法参数的值(或多个值),
- 翻译:MariaDB DATABASE()
- php 可以做pc客户端吗,vue.js能做pc端吗
- github使用_一文轻松学会GitHub的使用
- hdu 3006(状态压缩)
- Spring Boot 注解配置文件自动映射到属性和实体类
- Oracle 字符串函数
- 小学数学加减法测试软件,小学生数学加减测试题
- Apache-不重启完成添加或更改域名
- C++工作笔记-对继承的进一步认识
- 20145107 《Java程序设计》第四次实验报告
- mysql不显示默认密码_免安装版mysql不出现默认密码状况(基于mysql8.0)
- netty 异常 did not read anything but decoded a message
- 网页设计常用色彩搭配表
- Linux内核参考链接与书籍
- QueryList一个基于phpQuery的无比强大的采集工具
- php 页面日历形式显示,日历页面展示-PHP制作阴阳历转换的日历插件-PHP中文网教程...
- App逆向 Frida - 夜神模拟器安装配置 基本使用
- DrLLPS (相分离数据库): 第一个注释全面的液液相分离相关蛋白质数据库 (liquid-liquid phase separation database)