分治法,简而言之就是将原问题分为若干个小问题,解决之后再合并为原问题。
思路分析-基本步骤:
- 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题
- 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题
- 合并:将各个子问题的解合并为原问题的解
分治算法实现汉诺塔
思路:
如果只有一个盘,A -> C
如果有 n>=2 情况,我们总是可以看做是两个盘 1、最下边的一个盘 2、上边的所有盘
- 先把上面的盘 A -> B
- 把最下边的盘 A -> C
- 把B塔的所有盘从 B -> C
hanoitower(2,'a','b','c');
function hanoitower(num,a,b,c){
if(num == 1){
console.log("第"+num+"个盘从 "+a+"->"+b);
}else{
//如果有 n>=2 情况,我们总是可以看做是两个盘 1、最下边的一个盘 2、上边的所有盘
//1. 先把上面的盘 A -> B,移动过程需要c作为中转
hanoitower(num-1,a,c,b);
//2. 把最下边的盘 A -> C
console.log("第"+num+"个盘从 "+a+"->"+c);
//3. 把B塔的所有盘从 B -> C,移动过程需要a作为中转
hanoitower(num-1,b,a,c);
}
}
本文为算法笔记,需要详细视频学习请点击以下链接