分治算法:

一,分治算法介绍

二,分治算法的基本步骤:

分治算法最佳实践-汉诺塔:

汉诺塔的传说:​

汉诺塔游戏的演示和思路分析:

汉诺塔游戏的Java代码实现:


一,分治算法介绍

分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题 直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…

二,分治算法的基本步骤:

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

1)分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题

2)解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题

3)合并:将各个子问题的解合并为原问题的解。

分治算法最佳实践-汉诺塔:

汉诺塔的传说:

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如上图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

汉诺塔游戏的演示和思路分析:

一,如果是只有一个盘, 移动:A-C

二,如果我们有n>=2情况,我们总是可以看做是两个盘:一个是最下边的盘(一个),一个是上面的盘(多个)

1)先把最上面的盘,移动:A->B

2)把最下边的盘,移动:A->C

3)把B塔的所有盘,移动:B->C

汉诺塔游戏的Java代码实现:

public class Hanoitower {//汉诺塔public static void main(String[] args) {//测试
//        hanoiTower(1,'A','B','C');//1个盘
//        hanoiTower(2,'A','B','C');//2个盘
//        hanoiTower(3,'A','B','C');//3个盘hanoiTower(5, 'A', 'B', 'C');//5个盘}/*** 汉诺塔移动的方法* 使用分治算法:* @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 if (num >= 2) {//如果我们有n>=2情况,我们总是可以看做是两个盘:1最下边的盘(一个)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);//递归}}
}

长风破浪会有时,直挂云帆济沧海!

详解:分治算法【Java实现】——汉诺塔问题相关推荐

  1. 算法- 分治算法(实现汉诺塔)

    package Algorithm.dac;public class Hannoitower {public static void main(String []args){hannoiTower(5 ...

  2. 三阶汉诺塔java源代码_如何使用Java实现汉诺塔问题求解

    如何使用Java实现汉诺塔问题求解 时间:2017-09-28     来源:华清远见JAVA学院 汉诺塔问题是一个经典的问题,常常被用来测试对递归算法的理解程度,今天华清Java学院小编就和大家分享 ...

  3. 【YBT高效进阶】1基础算法/1逆推算法/2奇怪汉诺塔

    [YBT高效进阶]1基础算法/1逆推算法/2奇怪汉诺塔 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 汉诺塔问题,条件如下: 这里有 ...

  4. 用java编写汉诺塔问题_数据结构与算法之汉诺塔问题(Java递归)

    汉诺塔问题: 有三根柱子,源杆A,暂存杆temp,目的杆C A上有n层盘子,由小到大向下排列,现需要将A杆的盘子移到C杆中 要求:1)大的盘在下面,小的盘在上面 2)一次只能移动一个盘子 个人思路:先 ...

  5. 汉诺塔算法python_python实现汉诺塔算法

    题目: 汉诺塔给出最优解,如果对汉诺塔的定义有不了解,请翻看数据结构教材. 除了最基本的之外,还有一题,给定一个数组,arr=[2,3,1,2,3],其含义是这是一个有5个圆盘的汉诺塔,每一个数字代表 ...

  6. 汉诺塔算法 java_java实现汉诺塔算法

    package com.ywx.count; import java.util.Scanner; /** * @author Vashon * date:20150410 * * 题目:汉诺塔算法(本 ...

  7. java 解决汉诺塔问题

    //汉诺塔问题 //HanYang 2016/10/15 import java.util.Scanner; //输出 public class Hanuota {  public static vo ...

  8. 【离散数学中的数据结构与算法】十 汉诺塔

    汉诺塔也是经典的算法问题 文章目录 1 汉诺塔问题 1 汉诺塔问题 法国数学家卢卡斯(Edouard Lucas)在1883年提出了一个数学游戏: 传说在世界中心贝拿勒斯(印度北部)的圣庙里,一块黄铜 ...

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

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

  10. JAVA语法——汉诺塔问题

    package 汉诺塔问题;public class 汉诺塔问题 {public static void moveDish(int level, char from, char inter, char ...

最新文章

  1. 常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别
  2. 分享42个超棒的智能手机摄影画廊
  3. python的类方法_python 如何调用类的方法
  4. 【其他】U盘安装Ubuntu12.04成功后系统无法启动的问题
  5. linux date fmt,date_format(date,frm) 详解
  6. 使用zabbix监控MongoDB
  7. Font Awesome入门教程
  8. 华硕电脑的触摸板关闭
  9. 服务器软件系统日常运维工作制度
  10. 【FTP工具】8UFTP工具是我自己比较经常用的,推荐。
  11. python找不到模块pyodbc_python安装pyodbc模块
  12. 设定计算机锁定时间,如何设置电脑自动锁屏时间?
  13. 初级软件测试工程师:测试路上披荆斩棘,争做大厂程序员,斩获高薪offer~
  14. linux 筛选文件,「Linux基础知识」grep文件内容筛选命令的使用
  15. 【Web技术】前端水印实现方案
  16. Android 关于模拟点击和Hook框架的杂谈
  17. win10切换输入法快捷键_电脑小白必学的5个Win10技巧
  18. 使用Cello部署HyperLedger超级账本
  19. 量化交易——传统技术分析布林通道BollingerBands的原理及实现
  20. 模型可解释性-LIME

热门文章

  1. AI读书笔记:《智能简史(谁会替代人类成为主导物种)》
  2. Pycharm问题:this applicatation failed to start because it could not find or laod the qt plaform plugin
  3. 【珍藏版】震撼发布2017年Android百大框架排行榜
  4. 深入浅出MMC子系统
  5. 四核处理器_一千块普通办公电脑配置清单,还是四核处理器,能玩TX全家桶
  6. MSP430 G2553 Launchpad实现电容测量
  7. 手机怎样设置垃圾短信拦截?
  8. Spring boot 2 雷神
  9. mac os模拟器linux,获取Mac OS 8模拟器并重新体验Macintosh 90s
  10. 提交健康信息服务器拥挤,python hpilo 监控 hp ilo 服务器健康信息