演算法分析與設計 作業5 分治法求最小點對

2021-10-05 01:13:48 字數 834 閱讀 9940

令p為笛卡爾積平面上n>1個點構成的集合,集合中的每個點都按照其x軸座標公升序排列。用分治法求兩點之間的最小距離。

輸入:按x座標排列的n(n>=2)個點的集合s=

n>3的情況下:

m是s中各點x座標的中位數;

d1 = 計算的最近對距離;

d2 = 計算的最近對距離;

d = min(d1,d2);

依次考察集合s中的點p(x,y),如果(x<=xm 並且x>=xm-d),則將點p放入集合p1中;如果(x>xm 並且x<=xm+d),則將點p放入集合p2中;

將集合p1和p2按y座標公升序排列;

對集合p1和p2中的每個點p(x,y),在y座標區間[y,y+d]內最對取出候選點,計算與點p的最近距離d3;

返回min;

//右移一位

ans =

min(

closeset

(low, mid)

,closeset

(mid +

1, high));

//遞迴求出兩邊最小距離

for(i = low; i <= high; i++

)sort

(a, a + c, cmpy)

;for

(i =

0; i < c; i++

)}t(n)=2t(n/2)+f(n)

o(n logn)

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

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

演算法設計與分析(edu實訓)實驗五 分治法

任務描述 本關任務 利用分治法求一組資料中最大的兩個數和最小的兩個數。程式設計要求 請在右側編輯器begin end處補充 完成本關任務。測試說明 平台會對你編寫的 進行測試,比對你輸出的數值與實際正確數值,只有所有資料全部計算正確才能通過測試 測試輸入 10 資料的總個數 1 此行及以下為具體的每...

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

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