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