图解算法—分而治之

分而治之

在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
下面将通过两个示例来理解分治法:

图解示例1

假设你是一位农场主,有一小块(1680m * 640m)土地,你要将这块地均匀地分成方块,且分出的方块要尽可能大。
在这里插入图片描述

显然,下面的分法都不符合要求
在这里插入图片描述

如何将一块地均匀地分成方块,并确保分出的方块是最大的呢?使用分治策略!分治算法是递归的。使用分治解决问题的过程包括两个步骤。
1)找出基线条件,这种条件必须尽可能简单。
2)不断将问题分解(或者说缩小规模),直到符合基线条件。
下面就来使用分治找出上述问题的解决方案:

首先,找出基线条件。最容易处理的情况时,一条边的长度是另一条边的整数倍。
在这里插入图片描述

如果一边长25m,另一边长50m,那么可使用的最大方块为25mX25m。换言之,可以将这块地分成两个这样的方块。
接下来需要找出递归条件,这也是分治的用武之地。根据分治的定义,每次递归调用都必须缩小问题的规模。如何缩小上述问题的规模呢?
我们首先找出这块地可容纳的最大方块。
在这里插入图片描述

你可以从这块地中划出两个640mX640m的方块,同时余下一小块地。然后对余下的那一小块地使用相同的算法。
在这里插入图片描述

最初要划分的土地尺寸为1680mX640m,而现在要划分的土地更小,为640mX400m。换言之,通过分治方法,将均匀划分1680mX640m土地的问题简化成了均匀划分640mX400m土地的问题。
下面再次使用同样的算法。对于640mX400m的土地,可从中划出的最大方块为400mX400m
在这里插入图片描述

这将余下一块更小的土地,其尺寸为400mX240m。
在这里插入图片描述

你可从这块土地中划出最大的方块,余下一块更小的土地,其尺寸为240mX160m。
在这里插入图片描述

接下来,从这块土地中划出最大的方块,余下一块更小的土地。
在这里插入图片描述

余下的这块土地满足基线条件,因为160是80的整数倍。将这块土地分成两个方块后,将不会余下任何土地!
在这里插入图片描述

因此,对于最初的那片土地,适用的最大方块为80mX80m。
在这里插入图片描述

图解示例2

给定一个数字数组[2,4,6],要求使用递归函数来将这些数字相加,并返回结果。
第一步:找出基线条件。最简单的数组是数组不包含任何元素或只包含一个元素,计算总和将非常容易。
在这里插入图片描述

因此这就是基线条件。
第二步:每次递归调用都必须离空数组更近一步。
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值