(2)算法学习-分治法

(2)算法学习-分治法

分治法:就是将一个大问题分割成许多小问题,持续分割知道小问题容易求解。分治法分为三个步骤:1.divide,把原问题分割成小问题,2.Conquer,解决小问题,3.Combine,运用小问题的解答整理出原问题的解答。


合并排序法:


1.divide,将数列平分为两组,迭代平分,直到分成只有一个数字或两个数字停止分割。

2.Conquer,解决小问题,当分成只有一个数字或两个数字时,进行比较排序。

3.Combine,合并这也是最重要的一部分,将两部分排好序的数列进行合并,合并过程如下。

     


快速排序法:任选去一个数字当枢纽元,将比枢纽元小的数字放左边,比枢纽元大德放右边,然后对两边继续进行快速排序。



汉诺塔:

大盘子在下面,小盘子在上面,需要将第一根柱子上的盘子移动到第三根柱子上,可以分为三个步骤:


1.将上面的n1个盘子移动到第二根柱子上。

2.将最大的盘子移到第三根柱子上。

3.将上面n-1个盘子移动到第三根柱子上。

如此变成了如何将n-1个盘子移动到第二根柱子上的问题+n-1个盘子从第二根柱子移动到第三根柱子上的问题。这与汉诺塔原问题是类似的,所以可以使用分治法,不断迭代得到移动方案。


快速选择算法:运用快速排序算法的思路如下:




   分解并在解决之前合并法 divide and marriage before conquest

   一种分治法的变形,其特点是将分解出的子问题在解决之前合并。

   管道传输分治法 pipelined divide and conquer

一种分治法的变形,它利用某种称为管道的数据结构在递归调用结束前将其中的某些结果返回。此方法经常用来减少算法的深度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章