代码改变世界

分治算法

2023-11-16 16:35  钟铧若岩  阅读(9)  评论(0编辑  收藏  举报

1、基本介绍
分治算法是非常重要的一种算法,基本思想就是将一个大问题化解成俩个或多个子问题,直到子问题可以直接求解为止,将每个子问题的解合并。如:归并排序,汉诺塔问题,快速排序...

2、基本步骤
分治法在每一层递归上都有三个步骤:

(1)、分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题

(2)、解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题

(3)、合并:将各个子问题的解合并为原问题的解。
————————————————
版权声明:本文为CSDN博主「鲨瓜2号」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aetawt/article/details/122239186

 

 1 /**
 2      * 汉诺塔
 3      *
 4      * @param n 盘子的数量
 5      * @param a A柱
 6      * @param b B柱
 7      * @param c C柱
 8      */
 9     private static int count = 0; //用来记录移动次数
10  
11     public static void hanoiTower(int n, char a, char b, char c) {
12         count++;
13         if (n == 1) {
14             //如果只有一个盘子,直接放到C盘
15             System.out.println("第1个盘子:" + a + "-->" + c);
16         } else {
17             //如果盘子>=2
18             //第一步:将A柱除了最后一个盘子的所有的盘子借助C柱放到B柱
19             hanoiTower(n - 1, a, c, b);
20             //第二步:将A柱上最后一个盘子放到C柱
21             System.out.println("" + n + "个盘子:" + a + "-->" + c);
22             //第三步:将B柱上所有的盘子借助A柱放到C柱
23             hanoiTower(n - 1, b, a, c);
24         }
25     }