hdu 1007 最近點對

2021-07-11 11:58:13 字數 826 閱讀 7444

最近點對問題定義:已知上m個點的集合,找出對接近的一對點。

在二維空間裡,可用分治法求解最近點對問題。預處理:分別根據點的x軸和y軸座標進行排序,得到x和y,很顯然此時x和y中的點就是s中的點。

情況(1):點數小於等於三時:

情況(2):點數大於三時:

首先劃分集合s為sl和sr,使得sl中的每乙個點位於sr中每乙個點的左邊,並且sl和sr中點數相同。分別在sl和sr中解決最近點對問題,得到dl和dr,分別表示sl和sr中的最近點對的距離。令d=min(dl,dr)。如果s中的最近點對(p1,p2)。p1、p2兩點乙個在sl和乙個在sr中,那麼p1和p2一定在以l為中心的間隙內,以l-d和l+d為界,如下圖所示:

如果在sl中的點p和在sr中的點q成為最近點對,那麼p和q的距離必定小於d。因此對間隙中的每乙個點,在合併步驟中,只需要檢驗yp+d和yp-d內的點即可。

步驟1:根據點的y值和x值對s中的點排序。

步驟2:找出中線l將s劃分為sl和sr

步驟3:將步驟2遞迴的應用解決sl和sr的最近點對問題,並令d=min(dl,dr)。

步驟4:將l-d~l+d內的點以y值排序,對於每乙個點(x1,y1)找出y值在y1-d~y1+d內的所有點,計算距離為d'。                 如果d'小於d,令d=d',最後的d值就是答案。

參考部落格:

hdu1007 最近點對

題意 給你n個點,讓你求最近的兩個點的距離是多少.思路 這個題目我沒思路,我在網上看的是什麼分治 鴿巢原理,分治我知道,鴿巢原理我也知道,但是這個題目就是沒有證明出來他和鴿巢原理有jm關係,總之就是先以x或者y優先sort一下,然後每次列舉每個相鄰點的附近5個就行了 加自己一共六個 而且這個題目的前...

HDU 1007 最近點對

分治法求最近點對 遞迴將點不斷分成小組,計算最短距離。此時的最短距離僅僅是兩點都屬兩塊的某一塊 這裡的分割點是mid點 還需要考慮兩點分屬兩塊的情況。這時對於選點則把範圍縮小到了以mid為中心。再將距離mid點x軸2 mindist範圍點考慮在內。在這些點中,再取mid點,留下那些 y的距離不大於m...

最近點對模板 hdu1007

題意 給你一堆點讓你求最近兩點之間距離的一半,如果用暴力的話o n n 明顯會超時,那麼我們就用分治思想,將所有點按照橫座標x排序,然後取中間的mid,分著求1 mid,mid n,這樣遞迴求解,遞迴只需要logn級別就可以完成遞迴,這有點類似二分思想。1.我們取左邊點對最小和右邊點對最小比較,取最...