分治思想
分治算法适宜用很重要的算法,字面上的解释是“分而治之”,就是把一个复杂的问题分解为两个或更多相同或相似的自问题,再把子问题分解成更小的自问题。。。。。。直到最后子问题可以简单的直接求解,原问题的解即子问题解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)。。。。。。
分治算法可以求解一些经典问题
- 二分搜索
- 大整数乘法
- 棋盘算法
- 归并排序
- 快速排序
- 线性时间选择
- 最接近点对问题
- 循环赛日程表
- 汉诺塔
汉诺塔
function hannuoTower(num, a, b, c) {
if (num === 1) return console.log(`把${a}盘移动到${c}盘`);
// 1、把最上面的盘从A盘移动到B盘, 会使用到C盘
hannuoTower(num - 1, a, c, b);
// 2、 把最下面的盘 A移动到C
console.log(`把${a}盘移动到${c}盘\n`);
// 3、 把B上面的所有盘移动到C盘
hannuoTower(num - 1, b, a, c);
}
hannuoTower(5, 'A', 'B', 'C');