演算法 test5 最近對問題

2021-10-06 09:57:02 字數 466 閱讀 9241

設s是平面上n>1個點構成的集合,假設集合中的每個點都不一樣,最近對問題就是找出集合s中距離最近的點對。

當n大於等於2小於等於3時,問題可以通過蠻力演算法求解;當n大於3時,可以將集合分成兩個子集s1和s2,然後通過遞迴求解子問題s1和s2來得到最近對問題的解。

輸入:按x座標公升序排列的n(n>1)個點的集合s=的最近對距離; ——遞迴呼叫

d2 =計算的最近對距離; ——遞迴呼叫

d = min ;

依次考察集合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]內最多取出8個候選

點, 計算與點p的最近距離d3;

返回min ;

時間複雜度為o(nlogn)

彙編複習Test5

1.編乙個程式,從鍵盤輸入乙個不長於120個字元的串 回車鍵結束 然後將其中的字母字元顯示輸出 在顯示輸出前,補充輸出回車換行 datas segment buf db 120 dup datas ends stacks segment 此處輸入堆疊段 stacks ends codes segme...

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

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

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

p為笛卡爾平面上n 1個點構成的集合,求最近的兩個點的距離 n 2k 蠻力演算法 將每個點與其他點進行計算,求得最短的距離 但需要兩層遍歷,複雜度較高 分治演算法 把點集p 點個數為n 按照x軸從小到大排列 當n 3時,使用蠻力演算法 當n 3時,將點集分為左右大小為 n 2 和 n 2 的子集pl...