摘要:应用分治法是一种很重要的算法。字面上的解释是分而治之,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题…直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),二分查找,傅立叶变换(快速傅立叶变换),汉诺塔问题
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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/120964.html
摘要:程序员小吴打算使用动画的形式来帮助理解递归,然后通过递归的概念延伸至理解动态规划算法思想。因此,分治策略一般用来解决子问题相互对立的问题,称为标准分治,而动态规划用来解决子问题重叠的问题。难点就在于找出动态规划中的这三个概念。 在学习「数据结构和算法」的过程中,因为人习惯了平铺直叙的思维方式,所以「递归」与「动态规划」这种带循环概念(绕来绕去)的往往是相对比较难以理解的两个抽象知识点。...
摘要:汉诺塔问题有三根柱子,源杆,暂存杆,目的杆上有层盘子,由小到大向下排列,现需要将杆的盘子移到杆中要求大的盘在下面,小的盘在上面一次只能移动一个盘子个人思路先分析问题,用数学的归纳法当只有一个盘时,直接移动当有两个盘时,先将小的移到暂存杆,再 汉诺塔问题: 有三根柱子,源杆A,暂存杆temp,目的杆C A上有n层盘子,由小到大向下排列,现需要将A杆的盘子移到C杆中 ...
阅读 1114·2021-11-16 11:42
阅读 2894·2021-10-12 10:18
阅读 2853·2021-09-24 09:48
阅读 3457·2019-08-30 15:56
阅读 1521·2019-08-30 14:17
阅读 3035·2019-08-29 12:14
阅读 901·2019-08-27 10:51
阅读 2018·2019-08-26 13:28