實驗5 分治法解決就近對問題

2021-10-04 13:38:14 字數 1397 閱讀 9803

設計分析

原始碼在二維平面的n個點中,用分治法找出距離最近的一對點

可以採取蠻力法和分治法,雖然這篇部落格要講的是分治法,但是也要提一下蠻力法

這種方法要計算每一對點的距離,避免同一對點計算兩次,只考慮點的下標符合i分治法解決該問題,就是把平面上點的集合p先按照x軸座標公升序排列,為了更加方便,還可以按照點的y軸座標在另乙個列表中公升序排列,這個列表示為q。

當2<=n<=3時,這個問題可以用蠻力法求解

當n>3

efficentclosestpair

(p,q)

//使用分治法求解

//輸入:陣列p中儲存了平面上n>=2個點,並且按照這些點的x軸座標公升序排序

// 陣列q中儲存了與p相同的點,它按照這些點的y軸座標公升序排列

//輸出:最近點對之間的歐幾里得距離

if n<=

3 返回由蠻力演算法求出的最小距離

else

將p的前ceil(n/

2)個點,複製到p1

將q的前ceil(n/

2)個點,複製到q1

將p中剩餘點複製到pr

將q中剩餘點複製到qr

d1<

-efficientclosestpair

(p1,q1)

dr<

-efficientclosestpair

(pr,qr)

d<

-min

m<

-p[ceil

(n/2)-

1].x 將q中所有|x-m|

github原始碼

作業5 分治演算法之最近對問題

最近對問題 令p為笛卡爾平面上n 1個點構成的集合。簡單起見,假設集合中每個點都不一樣。我們還假設這些點是按照其x周座標公升序排列的。為了更加方便,我們還按照點的y軸座標在另乙個列表中進行公升序排列,分別記為px,py。當2 n 3時,通過蠻力求解出d。當n 3時,可以利用點集在方向上的中位數mid...

演算法分析與設計實驗五 分治法實現最近對問題

n個點在公共空間中,求出所有點對的歐幾里得距離最小的點對。分析步驟如下 分解 對所有的點按照x座標從小到大排序 排序方法時間複雜度o nlogn 根據下標進行分割,使得點集分為兩個集合。解決 遞迴的尋找兩個集合中的最近點對。取兩個集合最近點對中的最小值dis。合併 最近距離不一定存在於兩個集合中,可...

平面最近點對問題,三分治法。

最近點對問題,三分治法,和求中位數思路是一樣的,1,隨機選乙個數x,線性掃瞄,比x小的一堆a,比x大的一堆b,同時可以得到min min minb x,x maxa 2,對於這兩堆,分別重複1的步驟,直到結束。求中位數,需要拋棄掉一半資料,只求其中乙個子集合的n 2 k大即可。演算法概論 上有證明遞...