
回复
【分治算法】<上篇>
一、算法思想简介
1.基本思想:”分而治之“,将一个复杂问题分解成两个或多个相同或相似的子问题,再把子问题分解成更小的子问题…直到最后子问题可以简单的直接求解,原问题的解即为所有子问题的解的合并。
2.经典例子:
二、经典例子的代码实现
1.汉诺塔:
目标:将所有盘子从A柱移动到C柱,同一根柱子在任何时候不允许出现上面的某个盘子大于下面的某个盘子的情况。
基本思想(图解):将A柱的n个盘子全部移动到C柱,可先将A柱的前n-1个盘子移动到B柱子,再将第n个盘子移到C柱,再将B柱的n-1个盘子移到C柱。
代码实现
3.归并排序(递归版):
目标:使序列有序。
基本思想(图解):初始序列含有n个元素,则可看成是n个有序子序列,每个子序列的长度为1,然后两两归并,得到Math.ceil(n/2)个长度为2或1的有序子序列;再两两归并,…,如此重复,直到得到一个长度为n的有序序列位置。
代码实现:
4.快速排序(递归版):
目标:使序列有序。
基本思想:通过一趟排序将待排序记录分割成独立的两部分,其中每一部分记录的关键字均比另一部分记录的关键字小,则可以分别对着两部分记录继续进行排序,以达到整个序列有序的目的。
代码实现: