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

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

你可能感兴趣的:(重学数据结构与算法(Java),算法,java,数据结构)