首页 > 编程语言 > 详细

分治算法

时间:2020-07-10 01:15:50      阅读:91      评论:0      收藏:0      [点我收藏+]

1.分儿治之,将复杂的问题分解成简单的问题进行处理

2.基本步骤

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

3.举例说明
汉诺塔圆盘,A到C,大的不能在小的上面,中间有个B
分析过程只有一个在A,则直接挪到C
有两个在A,则把上面第一个挪到B,把下面一个挪到C,再把B上的挪到C
得出结论:假设有多个n,我们把上面的n-1个看成一个整体,把它从A挪到B;再将第n个挪到C,也就是只剩一个打印出来;最后将n-1从B挪到C上

代码实现:
package com.hy.tenalgorithm;

/**
* @author hanyong
* @date 2020/7/9 22:46
*/
public class Hannoitower {
public static void main(String[] args) {
hannoiTower(5, ‘A‘, ‘B‘, ‘C‘);
}

public static void hannoiTower(int i, char a, char b, char c) {
if (i == 1) {
System.out.println("第1个盘从" + a + "=>" + c);
} else if (i >= 2) {
//将上面i-1的放到b上
hannoiTower(i - 1, a, c, b);
//再将a的最下面一个放到c上,最后一个直接挪到c,输出一句话即可
System.out.println("第" + i + "个盘从" + a + "=>" + c);
//最后将b上的放到c上
hannoiTower(i - 1, b, a, c);
}
}
}


分治算法

原文:https://www.cnblogs.com/yongzhewuwei/p/13277150.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!