平面最近點對

2022-06-27 08:36:56 字數 948 閱讀 5458

推薦部落格 :

問題描述 :

已知在平面上有散落的好多點,求相距最近的兩個點的距離是多少 ?

一 、 窮舉法

最暴力的解法,列舉出所有可能的點對,這樣複雜度就是 n^2

二 、分治法  (複雜度 n*logn)

2 . 分解成的小問題結構是與原問題相似的

3 . 將小問題不斷的分解,直到不能再分解為止,將小問題合併起來,就是原問題的答案。

第一步我們將平面上的所有點按x軸先拍個序,從中間將這個平面一分為二,找到左半邊距離最近的距離,設為 d1, 在找到右半面距離最近的距離,設為 d2 , 需要注意的是,最短距離還有可能產生在跨越中線的兩側 。d = min(d1, d2);

有個小剪枝的技巧是 跨中線的情況它所產生的最優解一定是在中線兩側距離為 d 的點中的組合,找到這些橫座標符合的點,對於這些點還可以再進行依次剪枝,就是對所有點的縱座標進行乙個排序,暴力的時候如果匹配點與當前的點的距離大於 d ,那麼之後的點就可以直接跳過,然後在與最優解比較,並取最優的解。

struct node

pre[eps], pt[eps];

bool cmpxy(node a, node b)

ll dis(ll i, ll j)

ll dis2(ll i, ll j)

bool cmpy(node a, node b)

ll close_pair(ll l, ll r)

sort(pt, pt+k, cmpy);

for(ll i = 0; i < k; i++)

}return d;

}

平面最近點對

求點集中的最近點對有以下兩種方法 設p1 x1,y1 p2 x2,y2 pn xn,yn 是平面上n個點構成的集合s,設計演算法找出集合s中距離最近的點對。1 蠻力法 適用於點的數目比較小的情況下 1 演算法描述 已知集合s中有n個點,一共可以組成n n 1 2對點對,蠻力法就是對這n n 1 2 ...

平面最近點對

求點集中的最近點對有以下兩種方法 設p1 x1,y1 p2 x2,y2 pn xn,yn 是平面上n個點構成的集合s,設計演算法找出集合s中距離最近的點對。1 蠻力法 適用於點的數目比較小的情況下 1 演算法描述 已知集合s中有n個點,一共可以組成n n 1 2對點對,蠻力法就是對這n n 1 2對...

平面最近點對

求點集中的最近點對有以下兩種方法 設p1 x1,y1 p2 x2,y2 pn xn,yn 是平面上n個點構成的集合s,設計演算法找出集合s中距離最近的點對。1 蠻力法 適用於點的數目比較小的情況下 1 演算法描述 已知集合s中有n個點,一共可以組成n n 1 2對點對,蠻力法就是對這n n 1 2對...