常见算法——分治算法
作者:互联网
常见算法——分治算法
基本介绍
- 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。
基本思想
- 当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。
应用案例(汉诺塔问题)
借助中间柱B将A柱上的盘移动到C柱。
代码实现
package com.divide_and_conquer;
public class Hanoitower {
public static void main(String[] args) {
hanoiTower(5, '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 {
// 如果我们有n>=2情况,我们总是可以看做是两个盘1.最下边的盘2.上面的盘
// 1.先把最上面的盘A->B 移动过程会使用到c
hanoiTower(num - 1, a, c, b);
// 2.把最下边的盘A->C
System.out.println("第" + num + "个盘从" + a + "-->" + c);
// 3.把B塔的所有盘从B->C 移动过程会使用到a
hanoiTower(num - 1, b, a, c);
}
}
}
lu_long
发布了39 篇原创文章 · 获赞 31 · 访问量 6067
私信
关注
标签:常见,分治,问题,算法,num,hanoiTower,public 来源: https://blog.csdn.net/lu_long/article/details/104114179