资讯专栏INFORMATION COLUMN

【程序员必会十大算法】之分治算法(汉诺塔问题)

codecraft / 2659人阅读

摘要:应用分治法是一种很重要的算法。字面上的解释是分而治之,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

1.应用

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

2.汉诺塔问题

public static void main(String[] args) {        int[] arr = {1,1,2,2,33};        hanoiTower(3,"A","B","C");    }public static void hanoiTower(int num,char a,char b,char c){	   if (num == 1){	       System.out.println("将第1个盘从"+ a +"移动到" + c);	   }else {	       //将上面的盘从a移动到c,移动过程中会经过b	       hanoiTower(num - 1,a,c,b);		       //将最下面的盘从a移动到c	       System.out.println("将第"+ num +"个盘从" + a + "移动到" + c);		       //将B塔的所有盘从b移动到c 移动过程会用到a	       hanoiTower(num - 1,b,a,c);	   }}

结果

将第1个盘从A移动到C将第2个盘从A移动到B将第1个盘从C移动到B将第3个盘从A移动到C将第1个盘从B移动到A将第2个盘从B移动到C将第1个盘从A移动到C

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/120964.html

相关文章

  • 看动画轻松理解「递归」与「动态规划」

    摘要:程序员小吴打算使用动画的形式来帮助理解递归,然后通过递归的概念延伸至理解动态规划算法思想。因此,分治策略一般用来解决子问题相互对立的问题,称为标准分治,而动态规划用来解决子问题重叠的问题。难点就在于找出动态规划中的这三个概念。 在学习「数据结构和算法」的过程中,因为人习惯了平铺直叙的思维方式,所以「递归」与「动态规划」这种带循环概念(绕来绕去)的往往是相对比较难以理解的两个抽象知识点。...

    cnio 评论0 收藏0
  • 汉诺算法

    摘要:汉诺塔问题描述有三个圆柱,其中上从上至下放置了从小到大个圆盘,一次只能移动一个圆盘,且大的圆盘不能放在小圆盘之上,要求打印出从将圆盘移到的方案。 汉诺塔问题描述:有A, B, C三个圆柱,其中A上从上至下放置了从小到大n个圆盘,一次只能移动一个圆盘,且大的圆盘不能放在小圆盘之上,要求打印出从A将圆盘移到C的方案。 当n = 1时, A->C当n = 2时, A->B, A->C, B-...

    UsherChen 评论0 收藏0
  • 数据结构与算法汉诺问题(Java递归)

    摘要:汉诺塔问题有三根柱子,源杆,暂存杆,目的杆上有层盘子,由小到大向下排列,现需要将杆的盘子移到杆中要求大的盘在下面,小的盘在上面一次只能移动一个盘子个人思路先分析问题,用数学的归纳法当只有一个盘时,直接移动当有两个盘时,先将小的移到暂存杆,再 汉诺塔问题: 有三根柱子,源杆A,暂存杆temp,目的杆C A上有n层盘子,由小到大向下排列,现需要将A杆的盘子移到C杆中 ...

    yuxue 评论0 收藏0
  • 算法思想

    摘要:基础算法思想类别递推枚举递归分治贪婪回溯试探模拟递推递推分类顺推法从已知条件出发,逐步推算出要解决问题的方法。贪心算法的局限不能保证最后的解是最优的不能求最大最小解问题只能求满足某些约束条件的可行解范围。 基础算法思想类别 递推 枚举 递归 分治 贪婪 回溯(试探) 模拟 递推 递推分类 顺推法:从已知条件出发,逐步推算出要解决问题的方法。 逆推法:从已知结果出发,用迭代表达式...

    sshe 评论0 收藏0
  • 经典算法汉诺

    摘要:学编程,学,算法也是必不可缺的,这一次给大家带来一个经典的递归算法题,汉诺塔。当我们把层都搬到了中间柱的时候,只需要把最大的那个盘,从搬到柱就好了,剩下的怎么办呢柱永远是目标柱,我们不需要去移动它。 学编程,学IT,算法也是必不可缺的,这一次给大家带来一个经典的递归算法题,汉诺塔。算是算法的入门小题目之一吧~ 视频教程 什么是汉诺塔? 我这里直接拉来一个图解释一下(挂了请联系我)sho...

    Lin_R 评论0 收藏0

发表评论

0条评论

codecraft

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<