尋找最近點對

2022-08-13 20:18:24 字數 1046 閱讀 9349

演算法導論上乙個經典演算法,講解可看  

ac**的複雜度為 n*lgn*lgn,演算法導論上講還可以通過「預排序」,不用每次都按照y排序,複雜度可下降為n*lgn。

上可以ac。

#include#include

#include

using

namespace

std;

#define max 100005

#define inf 2e20

struct

point ;

point a[max];

point tmp[max];

intcmpx(point a, point b)

intcmpy(point a, point b)

double dis(point* a, int i, int

j) double mindis(int left, int

right)

if (left + 2 ==right)

int mid = left + (right - left) / 2

;

double minleft =mindis(left, mid);

double minright = mindis(mid + 1

, right);

d =min(minleft, minright);

int k = 0

;

for (int i = left; i <= right; i++)

}sort(tmp, tmp +k, cmpy);

for (int i = 0; i < k; i++) }}

returnd;}

intmain()

sort(a, a +n, cmpx);

double res = mindis(0, n - 1

); printf(

"%.2lf\n

", res / 2

); }

return0;

}

尋找最近點對

一維的數很簡單,先排序,再掃瞄已排好的數,相鄰兩個進行比較即可,時間複雜度為o n log2n n o n log2n 兩維的話 把平面上n個點分成兩部分left和right。假設分別求出left和right兩部分最短距離mindistleft和mindistright,還有一種情況就是點對中乙個點...

尋找最近點對

問題 在空間中有n個點,尋找空間中最近的2個點。法一 遍歷,o n 2 法二 分治演算法 將點分為左右兩半,分別找到最近的2個點,然後考慮交叉位置的點對中的最小距離,在這3者中取最小的那個。o nlogn 步驟 1.按照x軸排序 2.找到中間點,分別進行處理 3.2邊處理完成,將進行 merge 過...

尋找最近點對

給定平面上n個點的座標,找出距離最近的兩個點。根據水平方向的座標把平面上的n個點分成兩部分left和right。假設分別求出了left和right兩部分中距離最近的點對之最短距離mindist left 和mindist right 還有一種情況沒有考慮,那就是點對中乙個點來自於left部分,另乙個...