一.简介
分治算法的思想是将一个规模为n的问题分解为k个规模较小的子问题,且解决小规模的方法与解决大规模的方法一样。
二.实现
1.汉诺塔实现:
package com.vincent;
public class Main {
public static void main(String[] args) throws Exception {
hanoi(3,'A','B','C');
}
/**
* 汉诺塔问题,设盘子为n个,要移动n个盘子到目标柱子,则需要移动n-1个盘子到中间柱子,再把中间柱子盘子移动到目标柱子
* @param size 盘子数量
* @param src 盘子所在柱子
* @param tmp 中间柱子
* @param dst 目标柱子
*/
public static void hanoi(int size,char src,char tmp,char dst){
if(size == 1){
System.out.printf("第%d 个盘子从%c 移动到 %c\n",size,src,dst);
return;
}
hanoi(size-1,src,dst,tmp);
System.out.printf("第%d 个盘子从%c 移动到 %c\n",size,src,dst);
hanoi(size-1,tmp,src,dst);
}
}
效果:
三.总结
分治算法是解决大规模问题强有力方式,许多高效算法都有分治思想。如:快速排序算法、归并排序算法等