递归和分治算法
连人
这个作者很懒,什么都没留下…
展开
-
分治法:二维最近点对问题
大家好,我是连人。本期讲解二维最近点对的问题。 一维点对问题十分简单,在此不再赘述,大致就如同二分法般不断将区域分为两段。 假设区域被分为A以左和B以右,A以左的最近距离d1,B以右的最近距离d2,以及A与B的距离d3取最小值,即为这片区域的最近距离。 二维最近点对问题 首先,将点集按x从小到大排好,这一步的目的是使分区合理。 这个图中一共有十个点,根据分治策略,分为两个区,每个区五个点。 这...原创 2020-01-27 20:46:11 · 3847 阅读 · 3 评论 -
分治法:线性时间选择
大家好,我是连人,本期分享线性时间选择问题。 线性时间选择是基于快速排序的一种延申,本质上和快排具有类似的地方。它的目的是找出这个数组中第k小的值。 既然只需找出1个值,我们就不必将整个数组排序。通过分治法和分区(partition)可以只将k所在范围内的值进行查找即可。 当然可以使用二分法去确立k的范围,但是我的课本上没有所以我们今天不讨论。 下面介绍两种算法:随机选择和中位数选择。 随机选择 ...原创 2020-01-23 13:35:26 · 2582 阅读 · 1 评论 -
分治法:棋盘覆盖问题
在2k×2k的棋盘中有一个特殊方格,特殊方格的位置共有4k种情况。 下图是22×22棋盘的一种情况: 棋盘覆盖问题要求用下图中四种不同形态的L型骨牌覆盖这一个棋盘,并且L型骨牌之间不能重叠。 每个L型骨牌占三个格,抛去特殊方格,棋盘一共还剩4k-1个格,因此需要的方格数为(4k-1)/3个。 上例的棋盘经填充后变成下图: 使用分治策略,可以设计出一个简洁的算法: 将2k×2k的棋盘划分为2k...原创 2020-01-19 16:16:42 · 769 阅读 · 0 评论