分治法(Devide and Conquer)的基本思想

来源:互联网 发布:陈道明知乎 编辑:程序博客网 时间:2024/05/14 04:47

 分治法分为3个步骤:

   Devide:分解成2个或多个子问题

Conquer:递归的解决子问题

Combine:合并

一般来说,分治法的难点可以使在Devide(如快速排序),也可以是在Combine(归并排序)。简而言之,it depends!

----------------------------------------

以下以快速排序为例

Devide:将数组中的元素分为两部分,左边部分的元素小于枢轴元素,右边的元素大于枢轴元素。

 

   伪代码如下:

 

 

   1)在最好的情况下,每次都刚好均分为一半:

       T(n)=2T(n/2)+O(n)

        由主定律,时间复杂度为O(nlgn)

   2)在最坏的情况下,每次都分到一边(如初始时就是正序或逆序)

       T(n)=T(n-1)+O(n)

       由主定律,时间复杂度为O(n^2)

   一般情况下,快速排序的时间复杂度为O(nlgn),快速排序相对于其他排序更快,是因为Cache机制:CPU每次从内存中不是取一字节而

是取一段,这和快速排序的顺序存储时一致的。

 

原创粉丝点击