码迷,mamicode.com
首页 > 编程语言 > 详细

算法-分治法

时间:2015-06-27 15:58:49      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

分治法的基本思想

将规模为N的问题分解为k个规模较小的子问题,使这些子问题相互独立可分别求解,再将k个子问题的解合并成原问题的解。如子问题的规模仍很大,则反复分解直到问题小到可直接求解为止。在分治法中,子问题的解法通常与原问题相同,自然导致递归过程
技术分享

分治法是按照以下方案工作的:

1. 将问题的实例划分为同一个问题的几个较小的实例,最好拥有同样的规模。

2.对这些较小实例的求解(一般使用递归方法,但在问题规模足够小的时候,有时也会使用一些其他方法)。

3.如果必要的话,合并这些较小问题的解,以得到原始问题的解。

技术分享

分治法一定能降低复杂度?获取高效率?

A0+A1+A2+….+An

(A0+….+A[n/2])+(A[n/2+1]+….+An)

 

问题规模为n的实例被划分为两个规模为n/2的实例。更一般的情况下,一个规模为n的实例可以划分为若干个规模为n/b的实例,其中a个实例需要求解(a和b是常量)
为了简化分析,我们假设n是b的乘方,对于算法的运行时间,有下列递推式:

T(n)=a T(n/b)+f(n)

其中,f(n)是一个函数,表示将问题分解为小问题和将结果合并起来所消耗时间(对于求和的例子来说,a=b=2, f(n)=1)。该递推式被称为通用分治递推式
技术分享

   例如,对于上面的分治法求和算法,当输入规模为n=2时,加法运算次数A(n)可以用下面的例子来说,a=2, b=2, d=0;这样一来,因为a> bd 即 2>1,

    A(n)∈Θ(nlogba) = Θ(nlog22) = Θ(n)

算法-分治法

标签:

原文地址:http://www.cnblogs.com/wensonH/p/4603997.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!