版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、算法設(shè)計(jì)實(shí)驗(yàn)報(bào)告遞歸與分治策略問(wèn)題描述:給定數(shù)組a0:n-1,試設(shè)計(jì)一個(gè)算法,在最壞情況下用3n/2-2次比較找出a0:n-1中元素的最大值和最小值。解決方法:先將數(shù)組前一半的元素與后一半的元素分別逐個(gè)進(jìn)行比較,如第1個(gè)與第n/2+1個(gè),將較小者在前較大者在后交換好,則通過(guò)n/2次比較后最大值在后一半,最小值在前一半;然后在前一半與后一半中分別經(jīng)過(guò)n/2-1次比較得到最大值與最小值。整個(gè)算法經(jīng)過(guò)n/2+2*(n/2-1)=3/2*n-2 次比較。代碼實(shí)現(xiàn):#i ncludevstdio.h>int mai n()int max,mi n;int i,n,t;int a100;scan f
2、("%d",&n); for(i=0;i vn ;i+) sca nf("%d",&ai);for(i=0;i< n/2;i+) if(ai>a n/2+i) t=ai; ai=a n/2+i; a n/2+i=t;max=a n-1;mi n=a0;for(i=1;i< n/2;i+) if(mi n> ai)mi n=ai;for(i=n-1;i>=n /2;i-)if(maxvai)max=ai; prin tf("the max is %dn",max); prin tf(&quo
3、t;the min is %dn",mi n); return 0;運(yùn)行截圖:52 5 7 8 4 the nax is C七 he nin is 2 請(qǐng)按任意鍵繼續(xù)*.PLl.nax IS Vthe nin is 1情按枉意鍵繼續(xù)-實(shí)驗(yàn)心得:本實(shí)驗(yàn)要點(diǎn)在于運(yùn)用分治法的思想,將 N個(gè)數(shù)之間的問(wèn)題分割成一些小規(guī)模的相同問(wèn)題,以便減少計(jì)算的復(fù)雜度。16問(wèn)題描述:Gray碼是一個(gè)長(zhǎng)度為25的序列。序列中無(wú)相同元素,每個(gè)元素都是長(zhǎng)度為n位的串,相鄰元素恰好只有一位不同。用分治策略設(shè)計(jì)一個(gè)算法對(duì)任意的n構(gòu)造相應(yīng)的Gray碼。解決方法:當(dāng)n=1時(shí),Gray 碼:0,1當(dāng)n=2時(shí),Gray 碼:0
4、0, 10, 11, 01當(dāng)n=3時(shí),Gray 碼:000, 010,011,001,101,111,110, 100當(dāng)n=4時(shí),Gray 碼:0000,0010,0011,0001,0101,0111,1101,0110, 0100, 1100, 1110, 1111, 1001, 1011, 1010, 1000可以看出,從n=2開(kāi)始,每個(gè)n的Gray碼由兩部分組成。后一位的Gray碼可以從前一位的Gray碼求出。即在n的Gray碼的前半部分是n-1的所有Gray碼順次在前面加0得到;n的Gray碼的后半部分是n-1的所有Gray碼逆序在前面加1得到。代碼實(shí)現(xiàn):#i ncludevstdi
5、o.h>int str10000040;int n;int f(int x)int y=1;for(i nt i=1;i<=x;i+) y*=2;return y;void gray(i nt a,i nt b) if(b=O)return ; for(i nt i=0;iva/2;i+) stri n-b=0; stri+a/2 n-b=1; gray(a/2,b-1);for(i nt i=a/2;i<a;i+)for(i nt j=n-b+1;j vn ;j+) strij=stra-i-1j;int mai n()while(sca nf("%d"
6、,&n), n)gray(f( n),n);for(i nt i=0;i<f( n);i+, printf("") for(i nt j=O;j vn ;j+) prin tf("%d",strij);prin tf("n");return 0;運(yùn)行截圖:0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000實(shí)驗(yàn)心得:本實(shí)驗(yàn)要點(diǎn)是對(duì)Gray (int a, int b)遞歸調(diào)用,著重后一半的逆序在前面加1 .遞歸的使用
7、使得程序簡(jiǎn)短明了。問(wèn)題描述:動(dòng)態(tài)規(guī)劃在一個(gè)圓形操場(chǎng)的四周擺放著 n堆石子,現(xiàn)要將石子有次序地合并成一堆。規(guī)定每次只能選相鄰的兩堆石子合并成新的一堆,并將新的一堆石子數(shù)記為該次合并的得分。 試設(shè)計(jì)一個(gè)算法,計(jì)算出將n堆石子合并成一堆的最小得分和最大得分。解決方法:將圓形斷開(kāi)得aii=jMaxij= ai+aji=j-1Maxik+maxk+1j+ai+ai+1+aji<jai i=jMi nij= ai+aji=j-1Min ik+mi n k+1j+ai+ai+1+ +aji<j用動(dòng)規(guī)自底向上計(jì)算。代碼實(shí)現(xiàn):#i ncludevstdio.h>#defi ne inf 100
8、000000int a1000,sum1000;int n;int dp 100010002;int mai n()int i,j,k,h;while(sca nf("%d",&n )!=EOF)for(i=1;i<=n ;i+)sca nf("%d",&ai);int amin=inf;int amax=-i nf;for(h=1;hv=n ;h+)sum0=0;for(i=1;i<=n ;i+)sumi=sumi-1+ai;for(i=1;i<=n ;i+)dp ii0=d p ii1=0;for(i=1;i<
9、 n;i+)dp ii+10=d pii+11=ai+ai+1; for(j=3;j<=n;j+)for(i=1;i<=n-j+1;i+)int nmin=inf;int nm ax=-i nf;for(k=i;k<=i+j-2;k+)if(nmin >d pikO+d p k+1i+j-10+sumj+i-1-sumi-1) nmin=d pikO+dp k+1i+j-10+sumj+i-1-sumi-1;if(nm ax<d pik1+d pk+1i+j-11+sumj+i-1-sumi-1) nm ax=d pik1+d pk+1i+j-11+sumj+i-
10、1-sumi-1;dp ii+j-10=nmin;dp ii+j-11=nm ax;if(ami n>d p1 nO)ami n=d p1 n0; if(amax<d p1 n 1)amax=d p1 n1; an+1=a1;for(i=1;i<=n ;i+)ai=ai+1;prin tf("the min value is %dn",ami n); prin tf("the max value is %dn",amax);return 0;運(yùn)行截圖:世 3-1 氏i上;3 4 S nin value rax valuemin valu
11、e irtax ualueIsisisis3350.Jp;占7 nin value WAX valueISis2327實(shí)驗(yàn)心得:本實(shí)驗(yàn)用動(dòng)態(tài)規(guī)劃方法求解,關(guān)鍵在于先找出直線排列的最優(yōu)解,然后再刻畫(huà)圓排列時(shí)的最優(yōu)解,在計(jì)算中保存已經(jīng)計(jì)算過(guò)的結(jié)果,每個(gè)子問(wèn)題只計(jì)算一次,從而避免大量的計(jì)算。 問(wèn)題描述:長(zhǎng)江游艇俱樂(lè)部在長(zhǎng)江上設(shè)置了n個(gè)游艇出租站1, 2, ,n。游客可在這些游艇出租站租用游艇,并在下游的任何一個(gè)游艇出租站歸還游艇。游艇出租站i到游艇出租站j之間的租金為r(i,j),1<=i<j<=n。試設(shè)計(jì)一個(gè)算法,計(jì)算出從游艇出租站i到游艇出租站j所需的最少租金。解決方法:用dp
12、ij表示從i到j(luò)的最小費(fèi)用j-i=1j-i>1,i<k<jdp ij=rij dp ij=mi n(rij,mi n(dp ik+d pkj代碼實(shí)現(xiàn):#i ncludevstdio.h>#defi ne inf 100000000in t r100100;int dp 100100;int n;int mai n()int i,j,k;scan f("%d",&n);for(i=1;i vn ;i+) for(j=i+1;j<=n ;j+) sca nf("%d",&rij);for(i=1;i<=n
13、;i+)dp ii=0;for(i=1;i <n ;i+)dp ii+1=rii+1;for(k=3;k<=n ;k+) for(i=1;i<=n-k+1;i+) dp ii+k-1=rii+k-1; for(j=i+1;jv=i+k-2;j+)if(dp ii+k-1>d p ij+d pji+k-1) dp ii+k-1=d pij+d pji+k-1;while(sca nf("%d%d",&i,&j)!=EOF) prin tf("%dn",d pij);return 0;運(yùn)行截圖:實(shí)驗(yàn)心得:本實(shí)驗(yàn)運(yùn)用動(dòng)態(tài)
14、規(guī)劃方法,由原先構(gòu)造好的最優(yōu)解結(jié)構(gòu)編程實(shí)現(xiàn),減小計(jì)算量。貪心算法 問(wèn)題描述:利用優(yōu)先隊(duì)列及并查集這兩個(gè)抽象數(shù)據(jù)類(lèi)型實(shí)現(xiàn)Kruskal 算法。解決方法:首先將n個(gè)頂點(diǎn)看成n個(gè)孤立的連通分支,利用優(yōu)先隊(duì)列將所有邊按權(quán)從小到大排列。然后從第一條邊開(kāi)始,依邊權(quán)遞增的順序查看每一條邊,若該邊的兩個(gè)頂點(diǎn)分屬于不同分支,則用邊將其連起來(lái),否則看下一條。用到集合的查找與合并,即并查集數(shù)據(jù)類(lèi)型。代碼實(shí)現(xiàn):#i ncludevstdio.h>#defi ne MAX_TREE_SIZE 100typedef struct PTNode /樹(shù)的雙親表示 int data;int parent;P TNode;
15、typ edef structP TNode n odesMAX_TREE_SIZE; int n;P Tree;typedef PTree MFSet; / 并查集int in it_mfset(MFSet S)int fin d_mfset(MFSet S,i nt i) if(i<1 II i>S .n) return -1; int j;for(j=i;S. no desj. paren t>O;j=S. no desj. parent); return j;int merge_mfset(MFSet & S, i nt i,i nt j) if(i<1
16、 II i>S.n | j<1 | j>S .n)return -1;if(S. no desi. paren t>S. no desj. paren t) S.no desj. paren t+=S .no desi. parent; S.no desi. parent=j;elseS.no desi. paren t+=S .no desj. parent; S.no desj. paren t=i;return 1;/ "mfset.h"#i nclude <stdio.h>#i nclude "mfset.h"
17、#in clude <queue>using n ames pace std; struct bia ndouble weight;int u,v;frie nd bool op erator< (bia n n1, bia n n2) return n 1.weight > n 2.weight;edge100;bian t100;int n,e,k;void kruskal()p riority_queue <bia n> Q;for(i nt i=0;i<e;i+)Q.pu sh(edgei);MFSet S;S. n=n;for(i nt i=
18、1;i<=n ;i+)S.no desi. paren t=0;k=0;while(!Q.e mp ty() && kvn-1)bia n x=Q.t op();Q. pop ();int a=fi nd_mfset(S,x.u);int b=fi nd_mfset(S,x.v);if(a!=b)tk+=x;merge_mfset(S,a,b);int mai n()scan f("%d%d",&n,&e);for(i nt i=0;i<e;i+)sca nf("%d%d%lf",&edgei.u,&edgei.v,&edgei.weight); kruskal();for(i nt i=0;i<k;i+)prin tf("%d->%d %.3lfn",ti.u,ti.v,ti.weight);運(yùn)行截圖:3 313 52 3 &X->2 4.030l->3 5.000請(qǐng)按任意鍵繼續(xù)實(shí)驗(yàn)心得:本實(shí)驗(yàn)為使代碼簡(jiǎn)潔將并查集代碼寫(xiě)到了"mfset.h"作為頭文件使Kruskal用,利用優(yōu)先隊(duì)列簡(jiǎn)單地實(shí)現(xiàn)了排序。用貪心的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度二手車(chē)車(chē)輛購(gòu)銷(xiāo)與二手車(chē)檢測(cè)合同2篇
- 2024年餐飲行業(yè)運(yùn)營(yíng)總監(jiān)職務(wù)聘用書(shū)3篇
- 2025年度消防系統(tǒng)遠(yuǎn)程監(jiān)控與報(bào)警分包合同3篇
- 二零二五年度ICP證跨區(qū)域辦理及遠(yuǎn)程服務(wù)合同3篇
- 2024版一次性二手房買(mǎi)賣(mài)合同范本
- 2024版旋噴樁作業(yè)勞務(wù)分包合同書(shū)一
- 二零二五年度化妝品研發(fā)中心轉(zhuǎn)讓合同含專(zhuān)利技術(shù)與研發(fā)團(tuán)隊(duì)3篇
- 2024年聯(lián)營(yíng)購(gòu)車(chē)協(xié)議
- 二零二五年度分紅股投資風(fēng)險(xiǎn)分擔(dān)協(xié)議范本3篇
- 2024年餐飲業(yè)廚師勞動(dòng)協(xié)議樣本版B版
- 鄉(xiāng)鎮(zhèn)權(quán)責(zé)清單
- 職業(yè)院校技能大賽模塊一展廳銷(xiāo)售裁判情境
- 湖北省部分學(xué)校2023-2024學(xué)年高一上學(xué)期期末數(shù)學(xué)試題(解析版)
- 2023-2024學(xué)年四川省成都市錦江區(qū)重點(diǎn)中學(xué)八年級(jí)(上)期末數(shù)學(xué)試卷(含解析)
- 農(nóng)業(yè)裝備與機(jī)械化行業(yè)的農(nóng)業(yè)智能制造
- 嚴(yán)重精神障礙患者管理課件
- 杏樹(shù)主要病蟲(chóng)害及其防治方法
- 醫(yī)學(xué)檢驗(yàn)技術(shù)專(zhuān)業(yè)《臨床實(shí)驗(yàn)室管理》課程標(biāo)準(zhǔn)
- ACL導(dǎo)管維護(hù)三步曲臨床應(yīng)用
- 《計(jì)算智能》課件
- 《稀土礦石選礦》課件
評(píng)論
0/150
提交評(píng)論