分治法最近對問題.doc

分治法最近對問題.doc

ID:57804221

大?。?08.55 KB

頁數:5頁

時間:2020-03-29

分治法最近對問題.doc_第1頁
分治法最近對問題.doc_第2頁
分治法最近對問題.doc_第3頁
分治法最近對問題.doc_第4頁
分治法最近對問題.doc_第5頁
資源描述:

《分治法最近對問題.doc》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。

1、《算法設計與分析》實驗報告學號:姓名:日期:得分:一、實驗內容:分治法和蠻力法求最近對問題及其時間復雜度比較。二、所用算法的基本思想及復雜度分析:1.蠻力法求最近對問題:1)基本思想:分別計算每一對點之間的距離,然后找出距離最小的那一對,為了避免對同一對點計算兩次距離,只考慮的那些點對。2)復雜度分析:對于此算法,主要就是算兩個點的歐幾里得距離。注意到在求歐幾里得距離時,避免了求平方根操作,其原因是:如果被開方的數越小,則它的平方根也越小。所以復雜度就是求平方,求執(zhí)行次數為:;即時間復雜度為。2.分治法求最近對問題:1)基本思想:用分治法解決最近點對問題,就是將一個問題分解兩個子問題,

2、然后遞歸處理子問題,然后合并。可能兩個點在每個子問題中,也可能兩個點分別在兩個子問題中,就這兩種情況。則基本過程為:找一條中垂線(坐位集合坐標的中位數)把個元素分成左右兩部分元素,然后分別求得兩邊的最短距離,,然后取兩者中的最小者記為,在中線兩邊分別取的距離,記錄該距離范圍內點的個數,中線左邊有個元素,右邊有個元素,分別將兩邊的點按y坐標升序排列,在左邊集合中每一個點,找右邊集合的點,找到與之距離小于的點,更新最短距離,直到循環(huán)結束,即可求出最短距離。2)復雜度分析:應用分治法求解含有個點的最近對問題,其時間復雜性可由遞推式表示:。由以上分析:合并子問題的解的時間。進而可得分治法求最近

3、對問題的時間復雜度為:。三、源程序及注釋:#include5#include#include#include#includeusingnamespacestd;#defineeps1e-8#defineMAXN10000000#defineN5000structPoint{doublex,y;};PointS[N*2],S1[N],S2[N],P1[N],P2[N];doubleDistance(Pointa,Pointb){returnsqrt((a.x-b.x)*(a.x-b.x)+(a.y-

4、b.y)*(a.y-b.y));}intcmp1(Pointa,Pointb){returna.xb?b:a;}//分治法求最近對問題doubleClosestPoints1(PointS[],intn){inti,j,m;if(n<2)returnMAXN;else{doubled0=MAXN;doubled,d1,d2;intk1=0;intk2=0;intj1=0;intj2=0;sort(S,S+n,cmp1);Point

5、p=S[n/2];5m=p.x;//m=S中各點x坐標的中位數for(i=0;i<(n+1)/2;i++){S1[j1].x=S[i].x;S1[j1].y=S[i].y;j1++;}//構造S1中點的坐標小于mfor(i=(n+1)/2;i

6、[k1].y=S1[i].y;k1++;}//構造P1為S1中點的坐標與m的距離小于d的點集for(i=0;i

7、s);//求最小距離}}returnmin(d0,d);}}//蠻力法求最近對問題5doubleClosestPoints2(PointS[],intn){doubled0=MAXN;for(inti=0;i

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯系客服處理。