3.5 「Stanford Algorithms」O(n log n) Algorithm for Closest Pair 2 [Advanced - Optional]

Alright. So the plan for this video is to prove the correctness of the divide and

conquer closest to pair algorithm that we discussed in the previous video. So just

to refresh your memory, how does the outer algorithm work? Well, we're given endpoints

in the plane. We begin by sorting them, first by x-coordinate and then by

y-coordinate. That takes n log in time. Then we enter the main recursive divide

and conquer part of the algorithm. So what do we do? We divide the point set into the

left half and the right half, Q and R, then we conquer. We recursively compute

the closest pair in the left half of the point set Q. We recursively compute the

closest pair in the right half of the point set R. There is a lucky case where

the closest pair on the entire point set lies either all on the left or all on the

right. In that case, the closest pair is handed to us on a silver platter,

by one of the two recursive calls. But there remains the unlucky case where the closest

pair is actually split with one point on the left and one point on the right. So to

get our N log N running time bound, analogous to Merge Short in our inversion

counting, we need to have a linear time implementation of a subroutine which

computes the best, the closest pair of points, which is split, one on the left

and one on the right. Well, actually, we don't need to do quite that. We need to

do something only a little bit weaker. We need a linear time algorithm, which whenever

the closest pair in the whole point set is in fact split, then computes that split

pair in linear time. So let me now remind you of how that subroutine works.

So it has two basic steps. So first, there's a filtering step. So it looks at,

first of all, a vertical strip, roughly down the middle of the point set. And it

looks at, only at points which fall into that vertical strip. That was a subset of

the points that we called S sub Y, 'cause we keep track of them sorted by Y

coordinate. And then we do essentially a linear scan through SY. So we go through

the points one at a time, and then, for each point, we look at only the almost

adjacent points. So for each index I, we look only at J's that are between one and

seven positions further to the right, than I. So among all such points, we

compare them, we look at their distances. We remember the best such pair of points.

And then that's what we return from the count split pair subroutine. So we've

already argued, in the previous video, that the overall running time of the

algorithm is N log N. And what remains to prove correctness. And we also argued, in

the previous video, that correctness boils down to the following correctness claim.

In the sense that, if we can prove this claim, then the entire algorithm is

correct. So this is what remains. Our residual work is to provide a proof of

the correctness claim. What does it say? It says consider any split pair that is

one point p from the left side Q, capital Q, and another point little q drawn from

the right side of the point set capital R. And fur, further suppose that it's an

interesting split pair meaning that the distance between them's at most delta.

Here delta is recall the parameter pass to the count split pair subroutine, which is

the smallest distance between a pair of points all on the left or all on the

right. And this is the only case we're interested in. There's two claims. First

of all, for p and q, both members of the split pair survive the filtering step.

They make it into the sorted list S sub Y, and second of all, they will be considered by

that double for loop, in the sense that the positions of p and q in this array, S

sub Y, differ by at most seven. So that's the story so far. Let's move on to the

proof. So let's start with part A which is the easy part relatively of the claim. So

remember what we start with, our assumptions. We have a point p, let's

write it out in terms of the X coordinates, X1 and Y1, which is from the

left half of the point set. And we have a point q, which we'll call X2Y2, which

comes from the right half of the point set. And furthermore, we're assuming that

these points are close to each other. And we're gonna use that hypothesis over and

over again. So the Euclidean distance between p and q is no more than this

parameter delta. So, first, something very simple, which is that if you have two

points that are close in Euclidean distance, then both of their coordinates

have to be close to each other, right? If you have two points, and they differ by a

lot in one coordinate, then the Euclidean distance is gonna be pretty big as well.

So, specifically. By our hypothesis, that p and q have Euclidean distance less than

delta, it must be that the difference between their coordinates in absolute

value is no more than delta, and as well, the difference between their y-coordinates

is at most delta. Okay, and this is easy to see if you'd just return to the

definition of Euclidean distance that we reviewed at the beginning of the

discussion of closest points. Okay? So if your distance is at most delta, then in

each coordinate, you differ by at most delta as well. Now, what does A say?

[sound]. So proof of A. So what does part A of the claim assert? It asserts that p

and q are both members of SY, are both members of that vertical strip. So another

way of saying that is that the X coordinates of p and q, that is, the

numbers X1 and X2 both are within delta of Xbar. Remember, Xbar was in some sense

the median X coordinate. So the X coordinate of the N over two'th leftmost

point. So we're gonna do a proof by picture, so consider, forget about the Y

coordinates, that's of irrelevant right now, and just focus on the X coordinates

of all of these points. So on the one hand we have X bar. This is the X coordinate of

the N over two'th point to the left. And then there are the X coordinates which define

the left and the right borders of that vertical strip. Namely Xbar-delta and

Xbar+delta. And then somewhere in here are X1 and Y1, the X coordinates of the points

we care about, p and q. So a simple observation, so because p comes from the

left half of the point set, and Xbar is the rightmost X coordinate of the left

half of the point set, the X coordinate is at most Xbar. Right? So all points of Q

have X coordinate, at most, Xbar, in particular, p does. Similarly, since Xbar

is the rightmost edge of the left half of the point set, everything in the right half

of the point set has X coordinate, at least Xbar. So in particular, little q

does as well. So what does this mean. So this means x1, wherever it is, has to be

at the left of x bar. X2 wherever it is has to be to the right of x bar. What

we're trying to prove is that they're wedged in between x bar minus delta and x bar

plus delta. And the reason why that's true is because their x coordinates

also differ by at most delta. Okay, so what you should imagine is. You can imagine x1

and x2 are sort of people tied by a rope at the waist. And this rope has

length delta. So wherever x1 and x2 move, they're at most delta apart.

Furthermore x1, we just observed, can't move any farther to the right than Xbar.

So even if X1 moves as far to the right as it can, all the way to Xbar, X2, since

it's at most delta away, tied by the waist, can't extend beyond X bar+ delta. By

the same reasoning, X2 can't move any further to the left than Xbar, X1 being

tied to the waist to X2, can never drift further to the left than Xbar minus delta.

So that's the proof that X1 and X2 both lie within this region, and that defines

the vertical strip. So that's part A. If you have any split pair whose distance between

them is less than delta, they both have to wind up, in this vertical strip. And

therefore wind up in the filtered set, the proof set, S sub Y. So that's part A of

the claim. Let's now move to Part B. Recall what part B asserts. It says that

the points p and q, this split pair that are distance only delta apart. Not only do

they wind up in this sort of filtered set SY, but in fact, they are almost adjacent

in SY, in the sense that the indices in the array differ by, at most, seven

positions. And this is a part of the claim that is a little bit shocking. Really what

this says is that we're getting away with more or less a variant of our one

dimensional algorithm. Remember when we wanted to find the closest pair of points

on the line, all we had to do was sort them by their single coordinate and then

look at consecutive pairs and return the best of those consecutive pairs. Here what

we're saying is really, once we do a suitable filtering focus on points in this

vertical strip, then we just go through the points according to their Y

coordinate. And okay, we don't just look at adjacent pairs. We look at pairs within

seven positions, but still we basically do a linear sweep through the points in SY.

According to their Y coordinate and that's sufficient to identify the closest split

pair. So why on earth will this be true. So our workhorse in this argument will be

a picture which I am going to draw on next. So I'm going to draw eight boxes,

which have a height and width delta over two. So here, delta is the same parameter

that gets passed to the closest split pair subroutine. And it's also the same

delta which we're assuming p and q are closer to each other than, right? So

that's, remember, that's one of our hypotheses in this claim. The distance

between p and q is strictly less than delta. So we're gonna draw eight delta

over two boxes. And they're gonna be centered at x bar. So, this same center of

the vertical strip that defines S Y. And the bottom is going to be the smaller of the

Y-coordinates of the points p and q. So it might be p, it might be q. It

doesn't really matter. But the bottom is going to be the smaller of the two. So

the picture then looks as follows. So the center of these collections of eight

boxes, X bar, the bottom is the minimum of Y1, Y2. We're gonna have two rows and four

columns. And needless to say, we're drawing this picture just for the sake of

this correctness proof, right? This picture is just a thought experiment in

our head. We're just trying to understand why the algorithm works. The algorithm, of

course, does not draw these boxes. The subroutine, the, closest split pair

subroutine is just that pseudo code we saw in the previous video. This is just to

reason about the behavior of that subroutine. Now looking ahead, I'll make

this precise in two lemmas that are about to come up, what's going to be true

is the following. So, either p or q is on this bottom line, right? So we define the

bottom to be the lower Y coordinate of the two. So maybe, for example, q is the one

that has the smaller Y coordinate, in which case, is gonna be, somewhere, say,

down here. P, you remember, is from the left half of the point sets. So p is maybe

gonna be here or something. And we're gonna argue that both p and q have to be

in these boxes. Moreover, we're gonna argue that these boxes are sparsely

populated. Every one contains either zero or one point of the array S sub Y. So,

what we're gonna see is that there's at most eight points in this picture, two of

which are p and q, and therefore, if you look at these points sorted by Y

coordinate, it has to be that they're within seven of each other, the difference

of indices is no more than seven. So, we're gonna make those two statements

precise one at a time by the following two lemmas. Let's start with lemma one. Lemma

one is the easy one. And it states that all of the points of S sub Y, which show up

in between the Y coordinates of the points we care about p and q have to appear in

this picture, they have to lie in one of these eight boxes. So we're going to argue

this in two steps. First, we're going to argue that all such points have to have Y

coordinates within the relevant range of this picture between the minimum of Y1 and

Y2 and delta more than that, and secondly that they have to have X coordinates in

the range of this picture, namely between X bar minus delta and X bar plus delta. So

let's start with Y coordinates. So again, remember this key hypothesis we have,

okay. We're dealing with a split pair p-q that are close to each other. The distance

between X and Y is strictly less than delta. So the very first thing we did at

the beginning of this proof is we said well, if their Euclidean distance is less

than delta then they have to differ by at most delta in both of their coordinates,

in particular in their Y coordinate. Now remember whichever is lower of p and

q, whichever one has a smaller y coordinate is precisely at the bottom of

this diagram. For example, if q is the one with the smaller y coordinate, it might be

on the black line right here. So that means in particular x has y coordinate no

more than the top part of this diagram. No more than delta bigger than q. And of

course all points with Y coordinates in between them are equally well wedged into

this picture. So that's why all points of SY with a Y coordinate between those of p

and q have to be in the range of this picture, between the minimum of the two Y

coordinates and delta more than that. Now what about horizontally? What about the X

coordinates? Well this just follows from the definition of S sub Y. So remember,

S sub Y are the points that fall into this vertical strip. How did we define the

vertical strip? Well it had center Xbar, and then we fattened it by delta on both

sides. So just by definition, if you're an SY, you've gotta have X coordinates in the

range of this picture. X delta plus minus, sorry, xbar plus minus delta. So that

completes the proof of the lemma. So this is not. This is just a lemma. So I'll use a

lower case qed. Remember this is just a step toward proving the overall

correctness claim. But this is a good step. And again, the way you think about

this is it says we draw this boxes. We know that either p or q is at the bottom.

The other one is going to be on the other side of the black line x bar but will be

in some other box so perhaps maybe p is here and the lemma is saying that all the

relevant points of SY have to be somewhere in this picture. Now remember in our

double for loop we only search seven positions away, so the concern is that

this is a sorta super highly populated collection of eight boxes. That's the

concern, but that's not going to be the case and that's exactly what lemma two is

going to say. Not only do the points between p and q in Y coordinates show up

in this diagram, but there have to be very few. In particular, every box has to be

sparse, with population either zero or one. So, let's move on to lemma two. So formally

the claim is [sound], we have at most one point of the point set in each of these

eight boxes. And this is finally where we use, in a real way, the definition of

delta. This is where we finally get the payoff from our realization long ago, that

when defining the closest split pair subroutine, we only really need to be

correct in the unlucky case. In the case we're not handed the right answer by one

of our recursive calls. We're finally gonna use that fact in a fundamental way.

So we're gonna proceed by contradiction. So we're going to think about what happens

if there are two points in a single box and from that we'll be able to derive a

contradiction. So, call the points that wind up in the same box A and B. So, to

the contrary, suppose A and B lie in the same box. So, maybe this is A here, and

this is B here, at antipodal corners of this particular box. So from this

supposition, we have two consequences. First of all. I claim that A and B lie on

the same side of the point set. They're either both in the left side, Q or they're

both in the right side, R. So why is this true? Well it's because every box lies either

entirely on the left half of the point set or on the right half of the point

set. Recall how we define x bar. X bar is the x coordinate of the right most point

amongst the left half of the point set capital Q. So therefore points with x

coordinate at most x bar have to lie inside the left half Q. Points with x

coordinates at least x bar have to lie inside the right half of the point

set capital R. So that would be like in this example. A and b both lie in a box

which is to the right of x bar. So they both have to come in the right half

of the point set capital R. This is one place we are using that there are no ties

in X coordinate, so if there's a point with X, X coordinate or X bar, we can

count it as part of the left half. So every box, by virtue of being either to

the left of xbar or to the right of xbar, can only contain points from a common half

of the point set. So that's the first consequence of assuming that you have two

points in the same box. The second consequence is, because the boxes are

small, the points gotta be close. So, if A and B co-habitate a box, how far could

they be from each other? Well, the farthest they could be is like I've drawn

in the picture, with the points A and B. Where they're at opposite corners of a

common box. And then you bust out Pythagorean's Theorem, and what do you

get? You get that the distance between them is delta over two, the side of the

box times root two. And what's relevant for us is this is strictly less than

delta. Okay? But, now, here is where we use, finally, the definition of delta.

Consequences one and two in tandem, contradict how we define delta. Remember

what delta is. It's as close as two pair of, a pair of points can get if they both

lie on the left side of the point set, or if they both lie on the right side of the

point set. That is how we defined it. As small as a pair of points on a common half

can get to each other. But what have we just done? We've exhibited a pair A and B

that lie on the same half of the point set, and are strictly closer than delta.

So that contradicts the definition of delta. So that completes the proof of lemma

two. Let me just make sure we're all clear on why having proved lemma one and lemma two

we're done with the proof part B of the claim and therefore the entire claim

because we already proved part one, now a long time ago.

So let's interpret the 2 lemmas in the context of our picture that we had all

throughout. In terms of the eight boxes of side length delta over two by

delta over two. So again, whichever is the lower of p and q, and again let's just for

the sake of concreteness say it's q, is at the bottom of the picture. The other point

is on the other half of the line Xbar, and is in one of the other boxes. So, for

example, maybe p is right here. So lemma one says that every relevant point, every

point that survives the filtering and makes it into SY, by virtue of being in

the vertical strip, has to be in one of those boxes, okay? If it has Y coordinate

in between p and q. Lemma two says that you can only have one point in each of these boxes

from the point set, so that's gonna be at most eight total. [sound] So combining

them. Lemmas one and two imply, that there are almost eight points in this picture

and that includes p and q because they also occupy two of eight boxes. So in the

worst case, if this is as densely populated as could possibly be, given

lemmas one and two, every other box might have a point and perhaps every one of

those points has a Y coordinate between p and q. But this is as bad as it gets.

Any point of the strip with Y coordinate between p and q occupies a box.

So, at most, there are these six wedged in between them. What does this mean? This

means if from q you look seven positions ahead in the array, you are

guaranteed to find this point p. So a split pair with distance less than delta

is guaranteed to be identified by our double for loop. Looking seven positions

ahead in the sorted array SY is sufficient to identify, to look at every conceivably

interesting split pair. So that completes the assertion B of the correctness

claim and we're done. That establishes that this supremely clever

divide and conquer algorithm is indeed a correct O(nlog(n)) algorithm that computes the

closest pair of a set of n points in the plane.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343