演算法分析與實踐 作業5 最近點對問題

2021-10-23 01:26:18 字數 783 閱讀 9966

p為笛卡爾平面上n>1個點構成的集合,求最近的兩個點的距離(n=2k)

蠻力演算法:

將每個點與其他點進行計算,求得最短的距離

但需要兩層遍歷,複雜度較高

分治演算法:

把點集p(點個數為n)按照x軸從小到大排列

當n<=3時,使用蠻力演算法

當n>3時,將點集分為左右大小為⌈n/2⌉和⌊n/2⌋的子集pl和pr,通過遞迴呼叫每次將子集一分為二,求得子集中的最短距離,最後通過遞迴求得整個點集的最短距離。

需要注意的是,最近點對可能在分割線兩側,還需額外檢查。

efficientclosestpair(p,q,n){

if n<=3

返回蠻力演算法求得的最小距離

else

將p的前⌈n/2⌉個點複製到pl

將q的前⌈n/2⌉個點複製到ql

將p中餘下的⌊n/2⌋個點複製到pr

將q中餘下的⌊n/2⌋個點複製到qr

dl=efficientclosestpair(pl,ql)

dr=efficientclosestpair(pr,qr)

m=p[⌈n/2⌉-1].x

將q中所有|x-m|蠻力演算法:

複雜度o(n2)

分治演算法:

複雜度w(n)=2w(n/2)+o(n)

w(n)=o(nlogn)

演算法分析與設計5最近點對

在含有n個點的集合p中找出最近的兩個點的距離 採取分治策略,利用遞迴將問題反覆拆分為兩個子集,再對每個子集分別進行計算分析,然後合併比較得出最近點對間的距離 if n 2 mid high low 2 dist1 closestpoint p,low,mid dist2 closestpoint p...

演算法分析與設計實踐 作業5 分治最近對問題

有n個點在公共空間中,求出所有點對的歐幾里得距離最小的點對。歐幾里得距離計算公式 將集合s分成兩個子集s1和s2,根據平衡子問題原則,每個子集中的點數大致都為n 2。這樣分治後,最近點對將會出現三種情況 在s1中,在s2中或者最近點對分別在集合s1和s2中。利用遞迴分析法分別計算前兩種情況,第三種方...

演算法分析與實踐 作業5

在包含有n個點的集合s中,找出距離最近的兩個點。設 p1 x1,y1 p2 x2,y2 pn xn,yn 是平面的n個點。嚴格地講,最近點對可能不止一對,此例輸出一對即可。利用分治求解 首先對所有的點按照x座標 或者y 從小到大排序 排序方法時間複雜度o nlogn o nlogn o nlogn ...