令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。合併 最近距離不一定存在於兩個集合中,可...