算法导论学习笔记三之分治法与递归式解法

分治法概念:

分治法:将原问题分成n个规模较小而结构与原问题相似的子问题;递归地解这些子问题,然后合并其结果就得到原问题的解。

分治模式在每一层递归上都有三个步骤:

第一步:将原问题分解成一系列子问题;(分解)

第二部:递归地解各子问题。若子问题足够小,则直接求解;(解决)

第三部:将子问题的结果合并成原问题的解;(合并)

分治法算法分析:

当一个算法中含有对自身的递归调用时,其运行时间可用一个递归方程来表述,分治算法中的递归式是基于基本模式中的三个步骤的。设T(n)为在规模n下问题的运行时间。如果n足够小,例如有n<c(c为常量),则得到它的直径解的时间为常量,写作theta(1)。假设我们把原问题分成a个子问题,每一个的大小是原问题的1/b。若分解该问题和合并解的时间各为D(n),则得递归式:

             theta(1)                  若n<=c

T(n)={

             aT(n/b)+D(n)+C(n)  否则

 

合并排序算法的分析:

合并算法是分治法的一种,故基本步骤如下:

分解:这一步仅仅是计算出子数组中间位置,因而D(n)=theta(1)

解决:递归地解两个规模为n/2的子问题,时间为2T(n/2)

合并:已知merge过程在一个含有n个元素的子数组上的运行时间为theta(n)。则C(n)=theta(n).

函数D(n)和C(n)的阶为theta(n)和theta(1),他们的和是n的线性函数,即阶为theta(n)。将它与“解决”步骤所得的项2T(n/2),即得T(n)的递归表示:

 

             theta(1)                  若n=1

T(n)={

             2T(n/2)+theta(n)    若n>1

 

递归式解法:

 

本来打算详细讲解的,但是由于时间有限,直接在网上找到一份ppt上传吧,基本上能讲清楚,而且PPT格式比网页看起来更友好些,各位看官见谅

 

你可能感兴趣的:(算法导论学习笔记三之分治法与递归式解法)