当前课程知识点:算法设计与分析 > 5 Divide and Conquer > 5.3 Closest Pair of Points > Closest Pair of Points
我们再来研究一个基本的几何问题
最近点对问题
给定平面上n个点
求欧式距离最近的一对点
这是最基本的几何问题
在图形学
计算机视觉
几何信息系统
分子模型
空中交通管制等等都有重要的应用
这个问题也是最近邻居
欧式最小支撑树问题的一个特例
我们可以用强力搜索的方法
计算出任何两对之间的距离
然后寻找出最小的一个
这需要n^2级别的计算时间
我们考虑简化的情形
一维的情况
也就是说所有的点位于一条直线上
那么我们把这些点进行排序
然后依次计算相邻两点之间的距离
并记录下最小值
用logn的时间就可以得到问题的解
在下面的讨论中
为了叙述上的方便
我们假设
任何的两点的横坐标都是不同的
问题中的点落于二维的平面中
一个自然的想法是横竖各做一次分割
把平面分成四个部分
但我们发现这样做有不易克服的困难
我们希望把问题分为4个规模相仿的部分
但是如上的划分中
我们很难使得
这四部分包含的点的数量差不多
我们考虑把平面只做一次分割
用一条竖直的线L把平面分为两个部分
可以使得左右两边
包含的点的数目大致相同
然后我们分别去治理这两部分
求出每部分的最近点对
合的过程需要比较左右两部分的最近点对
以及分别位于两部分的点对之间的最小距离
从中选出最好的一个
这里的困难显然在于
求分别位于两部分的点对之间的最小距离
平凡地求解
这其中包含的运算也是n2级别的
还看刚才的例子
如果我们分别求出左右两部分的最小距离
分别为12和21
令δ为两者的最小值=12
一个重要的发现是
我们只需要去探索
L左右两边δ宽度区域内的点
因为对于分别位于两部分的点对
如果有一个点落在这个区域之外
这个点对的距离至少是δ
不少于我们已经发现的某对点的距离
把宽度2δ的条形区域中的点
按照它们的y坐标进行排序
这个区域还可能包含绝大多数的点
实际上我们不需要计算任意两点之间的距离
而只需要去计算距离可能小于δ的点对
之后的结果表明
只需要计算每个点与相邻的11个点的距离
从而需要线性的运算时间
在2δ条形区域中
令s_i是按照y坐标从小到大排列的第i个点
我们声称
如果|i-j|大于等于12
那么 s_i和s_j之间的距离至少是δ
我们把这个条形区域分割为一些
δ/2为边长的小正方形
可以发现 在任意的一个小正方形中
最多只包含一个点
这是因为我们已经设定
在左右两个区域中
最近点的距离最小值为δ
而小正方形中
两个点之间的距离
不超过2分之根号2乘以δ
所以如果i和j的序号相差12个
它们至少相隔两行
它们之间的距离至少是2×δ/2等于δ
这就得到了我们需要的结论
实际上 通过更细致的分析和证明
我们可以把结论中的12替换成7
下面我们给出 求最近点对的分治算法
首先计算出直线L
把平面分为左右两个部分
每部分包含一半的点
递归调用本算法
对左右两部分分别求最近点对
设最小距离分别为δ_1和δ_2
令δ为两者的最小值
只保留L左右两边δ宽的区域中的点
删掉其它的点
把保留下来的点按照y坐标进行排序
对于每个点
计算它与之后的11个点之间的距离
找到最小的一个
如果得到了小于δ的值
那么我们就更新δ
最后返回δ
我们来分析一下算法的运行时间
第一步计算对点进行排序
需要O(nlogn)的时间
递归调用子算法需要2T(n/2)
删除点的操作需要O(n) 的时间
对保留下来的点
按照y坐标进行排序
需要O(nlogn)的时间
对于条形区域中的点
计算它与11个邻居的距离
共需要O(n)的时间
所以我们有
算法的运行时间T(n)≤2T(n/2)+O(nlogn)
可以归纳的证明
T(n)=O(nlog^2n)
是否能得到O(nlogn)的结果呢
是的
我们可以不必在每次调用子算法的时候
都对点进行排列
在每一步算法中返回两个序列
分别按照x坐标和y坐标进行排列
那么在合并操作的时候
也很容易把它们并归为有序的序列
那么刚才所得到的运行时间
就可以被2T(n/2)+O(n)所控制
可以得到T(n)=O(nlogn)
-1.1 Introduction
-1.2 A First Problem: Stable Matching
--A First Problem: Stable Matching
-1.3 Gale-Shapley Algorithm
-1.4 Understanding Gale-Shapley Algorithm
--Understanding Gale-Shapley Algorithm
-Homework1
-Lecture note 1
--Lecture note 1 Introduction of Algorithm
-2.1 Computational Tractability
-2.2 Asymptotic Order of Growth
-2.3 A Survey of Common Running Times
--A Survey of Common Running Times
-Homework2
-Lecture note 2
--Lecture note 2 Basics of Algorithm Analysis
-3.1 Basic Definitions and Applications
--Basic Definitions and Applications
-3.2 Graph Traversal
-3.3 Testing Bipartiteness
-3.4 Connectivity in Directed Graphs
--Connectivity in Directed Graphs
-3.5 DAG and Topological Ordering
--DAG and Topological Ordering
-Homework3
-Lecture note 3
-4.1 Coin Changing
-4.2 Interval Scheduling
-4.3 Interval Partitioning
-4.4 Scheduling to Minimize Lateness
--Scheduling to Minimize Lateness
-4.5 Optimal Caching
-4.6 Shortest Paths in a Graph
-4.7 Minimum Spanning Tree
-4.8 Correctness of Algorithms
-4.9 Clustering
-Homework4
-Lecture note 4
--Lecture note 4 Greedy Algorithms
-5.1 Mergesort
-5.2 Counting Inversions
-5.3 Closest Pair of Points
-5.4 Integer Multiplication
-5.5 Matrix Multiplication
--Video
-5.6 Convolution and FFT
-5.7 FFT
--FFT
-5.8 Inverse DFT
-Homework5
-Lecture note 5
--Lecture note 5 Divide and Conquer
-6.1 Weighted Interval Scheduling
--Weighted Interval Scheduling
-6.2 Segmented Least Squares
-6.3 Knapsack Problem
-6.4 RNA Secondary Structure
-6.5 Sequence Alignment
-6.6 Shortest Paths
-Homework6
-Lecture note 6
--Lecture note 6 Dynamic Programming
-7.1 Flows and Cuts
-7.2 Minimum Cut and Maximum Flow
--Minimum Cut and Maximum Flow
-7.3 Ford-Fulkerson Algorithm
-7.4 Choosing Good Augmenting Paths
--Choosing Good Augmenting Paths
-7.5 Bipartite Matching
-Homework7
-Lecture note 7
-8.1 Polynomial-Time Reductions
-8.2 Basic Reduction Strategies I
--Basic Reduction Strategies I
-8.3 Basic Reduction Strategies II
--Basic Reduction Strategies II
-8.4 Definition of NP
-8.5 Problems in NP
-8.6 NP-Completeness
-8.7 Sequencing Problems
-8.8 Numerical Problems
-8.9 co-NP and the Asymmetry of NP
--co-NP and the Asymmetry of NP
-Homework8
-Lecture note 8
--Lecture note 8 NP and Computational Intractability
-9.1 Load Balancing
-9.2 Center Selection
-9.3 The Pricing Method: Vertex Cover
--The Pricing Method: Vertex Cover
-9.4 LP Rounding: Vertex Cover
-9.5 Knapsack Problem
-Homework9
-Lecture note 9
--Lecture note 9 Approximation Algorithms
-10.1 Landscape of an Optimization Problem
--Landscape of an Optimization Problem
-10.2 Maximum Cut
-10.3 Nash Equilibria
-10.4 Price of Stability
-Homework10
-Lecture note 10
--Lecture note 10 Local Search
-11.1 Contention Resolution
-11.2 Linearity of Expectation
-11.3 MAX 3-SAT
-11.4 Chernoff Bounds
-Homework11
-Lecture note 11
--Lecture note 11 Randomized Algorithms
-Exam