分治算法试题

2021-01-20 21:26

分治算法

当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。下面通过实例加以说明。

【例3】 在n个元素中找出最大元素和最小元素。

我们可以把这n个元素放在一个数组中,用直接比较法求出。算法如下: BEGIN

MIN:=A[1]:MAX:=A[1];

FOR I:=2 TO N DO

BEGIN

IF A[I] > MAX THEN MAX:=A[I];

IF A[I] < MIN THEN MIN:=A[I];

END.

上面这个算法需比较2(N-1)次,即时间复杂度是2(N-1)。能否找到更好的算法呢?我们用分治策略来讨论。

我们把n个元素分成

A1={A[1],...,A[int(n/2)]}

A2={A[INT(N/2)+1],...,A[N]}

两组,分别求这两组的最大值和最小值,然后分别将这两组的最大值和最小值相比较,求出全部元素的最大值和最小值。

如果A1和A2中的元素多于两个,则再用上述方法各分为两个子集。直至子集中元素至多两个元素为止。

例如有下面一组元素:

-13,13

,9,-5,7,23,0,15。用分治策略比较的过程如下:

图中每个方框中,左边是最小值,右边是最大值。从图中看出,用这种方法一共比较了10次,比直接比较法的14次减少4次,即约减少了1/3。

算法如下: procedure maxmin(i,j,max,min);

BEGIN

CASE J-I OF

0:MAX:=A[I];MIN:=A[I];

1:IF A[I] < A[J] THEN MIN:=A[I];MAX:A[J];

ELSE MAX:=A[I];MIN:=A[J];


分治算法试题.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:新时代健康产业集团

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: