版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗1 遞歸與分治算法一,實驗目的和要求(1)進一步掌握遞歸算法的設計思想以及遞歸程序的調試技術;(2)理解這樣一個觀點:分治與遞歸經常同時應用在算法設計之中。(3)分別用蠻力法和分治法求解最近對問題;(4)分析算法的時間性能,設計實驗程序驗證分析結論。 二,實驗內容設p1=(x1, y1), p2=(x2, y2), , pn=(xn, yn)是平面上n個點構成的集合s,設計算法找出集合s中距離最近的點對。三,實驗環(huán)境 turbo c 或vc+四,實驗學時 2學時,必做實驗五,數(shù)據(jù)結構與算法#include#include#define true 1#define false 0typede
2、f struct node double x; double y;node; /坐標typedef struct list node* data; /點 int count; /點的個數(shù)list;typedef struct closenode node a; node b; /計算距離的兩個點 double space; /距離平方closenode;int n; /點的數(shù)目/輸入各點到list中void create(list &l) coutn; l.count=n; l.data = new nodel.count; /動態(tài)空間分配 cout輸入各點坐標 :x_y):endl; for
3、(int i=0;il.datai.xl.datai.y;/求距離的平方double square(node a,node b) return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);/蠻力法void bruteforce(const list &l,closenode &cnode,int begin,int end) for(int i=begin;i=end;+i) for(int j=i+1;j=end;+j) double space=square(l.datai,l.dataj); if(spacecnode.space) cnode.a=l
4、.datai; cnode.b=l.dataj; cnode.space=space; /冒泡排序void bubblesort(node r,int length)int change,n;n=length;change=true;double b,c;for(int i=0;in-1&change;+i)change=false;for(int j=0;jrj+1.x)b=rj.x;c=rj.y;rj.x=rj+1.x;rj.y=rj+1.y;rj+1.x=b;rj+1.y=c; change=true;/分治法中先將坐標按x軸從小到大的順序排列void paixu(list l) bub
5、blesort(l.data,l.count); /調用冒泡排序/左右各距中線d的區(qū)域的最近對算法void middle(const list & l,closenode &cnode,int mid,double midx) int i,j; /分別表示中線左邊,右邊的點 double d=sqrt(cnode.space); i=mid; while(i=0&l.datai.x=(midx-d) /在左邊的d區(qū)域內 j=mid; while(l.data+j.x=(midx+d)&j=l.count) /在右邊的d區(qū)域內 if(l.dataj.y(l.datai.y+d) /判斷縱坐標是否
6、在左邊某固定點的2d區(qū)域內 continue; double space = square(l.datai,l.dataj); if(cnode.spacespace) /在滿足條件的區(qū)域內依次判斷 cnode.a=l.datai; cnode.b=l.dataj; cnode.space=space; -i; /分治法求最近對void divideconquer(const list &l,closenode &closenode,int begin,int end)if(begin!=end) int mid = (begin+end)/2; /排列后的中間的那個點 double midx
7、 = l.datamid.x; divideconquer(l,closenode,begin,mid); /繼續(xù)在左半邊用分治法求最近對 divideconquer(l,closenode,mid+1,end); /繼續(xù)在右半邊用分治法求最近對 middle(l,closenode,mid,midx); /判斷左右各距中線d的區(qū)域,是否有最近對void main() /初始化 list list; closenode closenode; closenode.space = 10000; /最近點的距離 create(list); /輸入各點到nlist中 cout各點坐標為:endl; f
8、or(int i=0;ilist.count;+i) coutx=list.datai.x y=list.datai.yn; bruteforce(list,closenode,0,list.count-1); cout用蠻力法求最近對:endl; cout最近對為點 (closenode.a.x,closenode.a.y)和點(closenode.b.x,closenode.b.y)n最近距離為: sqrt(closenode.space)endl; coutendlendl; cout用分治法求最近對:endl; paixu(list); cout經過排序后的各點:endl; for(i
9、nt j=0;jlist.count;+j) coutx=list.dataj.x y=list.dataj.yn; divideconquer(list,closenode,0,list.count-1); cout最近對為點 (closenode.a.x,closenode.a.y)和點(closenode.b.x,closenode.b.y)n最近距離為: sqrt(closenode.space)=0&l.datai.x=(midx-d) /在左邊的d區(qū)域內 j=mid; while(l.data+j.x=(midx+d)&j=l.count) /在右邊的d區(qū)域內 if(l.dataj
10、.y(l.datai.y+d) /判斷縱坐標是否在左邊某固定點的2d區(qū)域內 continue; double space = square(l.datai,l.dataj); if(cnode.spacespace) /在滿足條件的區(qū)域內依次判斷 cnode.a=l.datai; cnode.b=l.dataj; cnode.space=space; -i; /分治法求最近對void divideconquer(const list &l,closenode &closenode,int begin,int end)if(begin!=end) int mid = (begin+end)/2; /排列后的中間的那個點 double midx = l.datamid.x; divideconquer(l,closenode,begin,mid); /繼續(xù)在左半邊用分治法求最近對 divideconquer(l,closenode,mid+1,end); /繼續(xù)在右半邊用分治法求最近對 middle(l,closenode,mid,midx); /判斷左右各距中線d的區(qū)域,是否有最近對七,實驗結果八,實驗體會通過這次實驗,我深刻了解到分治法的實用性,有效性。當遇到規(guī)模較大的問題,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第一單元 語文園地 教學實錄-2024-2025學年六年級上冊語文統(tǒng)編版
- 上海交通職業(yè)技術學院《自然辯證法概論自然辯證法概論》2023-2024學年第一學期期末試卷
- 校園安全教育:假期注意事項
- 上海行健職業(yè)學院《實驗室生物安全培訓》2023-2024學年第一學期期末試卷
- 上海海關學院《施工圖規(guī)范》2023-2024學年第一學期期末試卷
- 上海海關學院《電子學》2023-2024學年第一學期期末試卷
- 幼兒園防災演練
- 2024年中國幽蘭非常護理液市場調查研究報告
- 上海工藝美術職業(yè)學院《高級數(shù)據(jù)庫管理》2023-2024學年第一學期期末試卷
- 塑料垃圾的分解過程
- 2023-2024學年湖南省漣源市初中語文七年級上冊期末評估試卷
- 2023-2024學年山東省青島市小學語文二年級上冊期末通關試題
- GB/T 26158-2010中國未成年人人體尺寸
- 納米酶研究進展
- 應用統(tǒng)計學實驗指導書
- 物流學概論(第五版)第10章-區(qū)域物流教材課件
- 《幼兒衛(wèi)生保健基礎》第五章 特殊幼兒衛(wèi)生保健
- 最新國家開放大學-《財務管理》-機考復習資料-附答案
- 產科品管圈降低產后乳房脹痛發(fā)生率
- 《物理因子療法》考試復習題庫(帶答案)
- 2023屆高考作文模擬寫作-“引體向上”與“低姿匍匐”課件
評論
0/150
提交評論