




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
PAGE15-實驗總成績:實驗總成績:——————————————————————————裝訂線—————————————————————————————————報告份數(shù)報告份數(shù):信息安全算法設計實驗報告專業(yè)班級:學生姓名:學號(班內(nèi)序號):年月日【實驗內(nèi)容】根據(jù)題目的要求,編程實現(xiàn)相關信息安全的基本算法,編程語言不限?!緦嶒灂r間和地點安排】時間:課內(nèi)上機時間地點:信息安全實驗室指導老師:XX【實驗題目及要求】(一)DNA序列1.輸出附件DNA.txt文件中每種DNA堿基三聯(lián)體的個數(shù)。從AAA到TTT,一共64種三聯(lián)體。2.算法代碼:
#include<stdio.h>#include<stdlib.h>#include<time.h>intmain(){ intA[4][4][4]={0}; intd[3]; charr[4]={'A','C','G','T'}; intindex; inti,j,k,m; FILE*fp; doublestart,finish; charch; intisLEGAL[256];//對可能出現(xiàn)的ASCII符號判斷并求值,一身二任 start=clock(); for(i=0;i<256;i++) isLEGAL[i]=-1; //以下是合法值映射,非法值映射到-1上 isLEGAL['A']=0; isLEGAL['C']=1; isLEGAL['G']=2; isLEGAL['T']=3; fp=fopen("DNA.txt","r"); m=0; ch=fgetc(fp); while(ch!=EOF) { index=isLEGAL[ch]; if(index>-1) { d[m]=index; ++m; } if(m==3) { ++A[d[0]][d[1]][d[2]]; m=0; } ch=fgetc(fp); } for(i=0;i<4;++i) for(j=0;j<4;++j) for(k=0;k<4;++k) printf("%c%c%c:%d\t",r[i],r[j],r[k],A[i][j][k]); fclose(fp); printf("\n"); finish=clock(); printf("時間:%.3fms",finish-start); return0;}3.實驗結果:4.實驗心得:通過這次實驗,我體會到做完測試實驗并非不容易成功,遍歷算法對實驗的影響,處理文件的速度不一樣。我曾經(jīng)用ifelseif和switch來用來判斷,發(fā)現(xiàn)ifelse竟然比switch運行的時間快。所以在判斷ifelse-if和switch的運行速度的時候不能單純說誰快誰慢。隨后聽老師用以上的的映射后,其中判斷的跳轉(zhuǎn)很簡單。這種映射的方法能很快速的解決多路分支的問題。(二)二維求和問題
1.設已定義某int型二維向量a,且對其任意元素a[i][j]賦值為i*j+j+1,則求部分和s[i][j]=。2.實驗代碼#include<iostream>#include<vector>#include<iomanip>usingnamespacestd;usingstd::vector;voidperfixsum(constvector<vector<int>>&A,vector<vector<int>>&S,constintu,constintv){ inti; S=A; for(i=0;i<u;i++) for(intj=1;j<v;j++) S[i][j]+=S[i][j-1]; for(i=1;i<u;i++) for(intj=0;j<v;j++) S[i][j]+=S[i-1][j];}voidmain(){ intu,v,sum=1; cout<<"請輸入矩陣的行列"<<endl; cin>>u>>v; vector<vector<int>>a(u); vector<vector<int>>s(u); for(size_ti=0;i<u;i++) { a[i].resize(v); for(size_tj=0;j<v;j++) a[i][j]=sum++; } perfixsum(a,s,u,v); for(i=0;i<u;i++) { for(size_tj=0;j<v;j++) cout<<setw(5)<<s[i][j]; cout<<endl; }}3.實驗結果4.實驗心得通過這次實驗,我個人得到不少收獲,培養(yǎng)綜合應用相關知識來解決測試問題的基礎理論,培養(yǎng)在實踐中研究問題,分析問題和解決問題的能力。因為做的是2維的,只是在一維求和的基礎上,把n行的數(shù)加上n-1行的數(shù),就得到了,第n行的數(shù)據(jù)。(三)隨機行走1.我們面對一個有許多小瓷磚拼起來的三角形區(qū)域,每塊是邊長為一的等邊三角形,K只小蟲在此區(qū)域內(nèi)隨機行走,小蟲可以停留在原來的區(qū)域內(nèi),也可以走到與原來相鄰的三個區(qū)域內(nèi),即共有四種選擇。每次模擬過程中,小蟲需要多少步才能把整個區(qū)域走完,若能走遍,輸出每只小蟲到小瓷磚的次數(shù),若不能走遍,說出理由。2.實驗代碼#include<vector>#include<ctime>#include<iostream>#include<iomanip>usingstd::vector;usingnamespace::std;main(){ inti,j,n,flag=1,p,q; intdata; cout<<"請輸入階數(shù)"<<endl; cin>>n; vector<vector<int>>mat(n);//2維向量 for(i=0;i<n;i++) { mat[i].resize(2*i+1); for(j=0;j<2*i+1;j++) mat[i][j]=0; } mat[0][0]=1; i=0;j=0; srand((unsigned)time(NULL));//隨機數(shù) while(flag) { data=rand()%4; switch(data) { case0:mat[i][j]++;break;//在原地 case1:{ j--;//左移 if(j<0)//發(fā)生越界回到原來的地方 {j++;} mat[i][j]++;break; } case2:{ j++;//右移 if(j>2*i)j--; mat[i][j]++;break; } case3: { if(!(j%2))//j為偶數(shù)是上三角形,下移 {i++,j++; if(i>=n) {i--;j--;} } else { i--,j--; if(i<0) {i++;j++;} } mat[i][j]++; } } flag=0; for(p=0;p<n;p++) { for(q=0;q<2*p+1;q++) if(mat[p][q]==0) {flag=1;p=n;q=2*p;} } } for(i=0;i<n;i++) { for(j=0;j<2*i+1;j++) cout<<setw(4)<<mat[i][j]; cout<<endl; }}3.實驗結果4.實驗心得在做實驗前,一定要將課本上的知識吃透,因為這是做好實驗的基礎,否則就會使實驗難度加大,浪費做實驗的時間。這次沒有考慮算法的時間。這種用時間的為種子的隨機數(shù)是真正的隨機數(shù),在實驗中的跳轉(zhuǎn),沒有想到好的映射的方法,所以選用了switch。實驗中,小蟲碰壁時也就是小蟲移動位置在向量外,視為沒有移動。最主要是要寫出每個數(shù)字所對應的下邊移動的方向。向量也比用數(shù)組方便,和節(jié)約資源。(四)幻方
1.所謂幻方,就是一個n行n列的正方形,共有n2個格子,將1、2、3、……、n2這些數(shù)字放到這些格子里,使其每行的和、每列的和及兩條對角線的和都是一個相同的數(shù)S,S稱為幻和。找到所有的符合條件的幻方。2.實驗代碼#include<iostream>#include<vector>#include<ctime>#include<iomanip>usingstd::vector;usingnamespace::std;intn;voidpermute(vector<int>&a,intk){ size_ti;//計數(shù)變量 intswapTemp;//交換首元素暫時存變量 intconstsum=n*(1+n*n)/2; intsum1=0; if(k==a.size()) //到終止條件,則在屏幕上輸出某一個排列 { for(i=0;i<n;i++)//斜向 {sum1+=a[i*n+i];} if(sum!=sum1) return; for(i=0;i<a.size();i++) { cout<<setw(3)<<a[i]; if((i+1)%n==0) cout<<endl; } cout<<endl; } else//未到終止條件,用輪換首元素的方式繼續(xù)遞歸 for(i=k;i<a.size();i++) { //先把首元素a[k]與后面的元素交換 swapTemp=a[k]; a[k]=a[i]; a[i]=swapTemp; if((k+1)%n==0)//橫向 { for(inti=0;i<n;i++) sum1+=a[k-i]; if(sum!=sum1) {sum1=0;gotoloop;} sum1=0; } if(k>=n*(n-1))//縱向 { intm=k-n*(n-1); for(inti=0;i<n;i++) sum1+=a[k-i*n]; if(sum!=sum1) {sum1=0;gotoloop;} sum1=0; } if(k==n*(n-1))//對角線 {for(inti=0;i<n;i++) sum1+=a[(i+1)*(n-1)]; if(sum!=sum1) {sum1=0;gotoloop;} sum1=0; } //用遞歸產(chǎn)生此情況下的排列 permute(a,k+1); //再把首元素換回來以進行下次交換loop: swapTemp=a[k]; a[k]=a[i]; a[i]=swapTemp; }}intmain(){ clock_tstart,finish; doubleduration; cout<<"請輸入階數(shù)"<<endl; cin>>n; vector<int>data(n*n); for(size_ti=0;i<data.size();i++) data[i]=i+1; start=clock(); permute(data,0); finish=clock(); duration=(double)(finish-start)/CLOCKS_PER_SEC; printf("%fseconds\n",duration); return0;}3.實驗結果4階耗時太長,沒有給出結果4.實驗心得及思路在實驗過程中我受益匪淺,運用permute來實現(xiàn)對n*n個元素的全排列,在選擇的時候采用的是排列好n個元素時,判斷這一行的元素和是否是幻和。如果不是就跳過下面所有以這n個元素為頭的排列。在一列排好后也是同樣的驗證方法。有個特殊的點就是負對角線,我也加了一個判斷。程序中不足的地方就是,前兩種判斷最多有一種會執(zhí)行,最后一個在一個排列中只會執(zhí)行一次,所以可以改進至一個選擇而不是三種判斷。另外本代碼中,用到了goto語句實現(xiàn)了跳過錯誤的排列,曾經(jīng)想過在permute(a,k
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國際貿(mào)易買賣合同模板
- 采購合同協(xié)議樣本
- 機械租賃安全規(guī)范合同版
- 供熱服務保障合同
- 工廠購銷合同范本
- 城市戶外廣告投放工程合同
- 塔吊設備供應合同
- 采購與供應合同協(xié)議書范本
- 長期倉庫租賃合同模板
- 寵物貓咪領養(yǎng)及養(yǎng)護合同2025
- 標準化機房改造方案
- 珠海市第三人民醫(yī)院中醫(yī)智能臨床輔助診療系統(tǒng)建設方案
- 早產(chǎn)臨床診斷與治療指南
- 工程簽證單完整版
- 《義務教育數(shù)學課程標準(2022年版)》初中內(nèi)容解讀
- 2025屆高三化學一輪復習 原電池 化學電源(第一課時)課件
- 全院護理查房(食管裂孔疝)
- 川教版信息技術六年級下冊全冊教案【新教材】
- 2024-2025學年統(tǒng)編版語文九年級下冊第7課《溜索》任務驅(qū)動型教學設計
- (國賽)5G組網(wǎng)與運維賽項備考試題庫及答案
- 代寫文章合同模板
評論
0/150
提交評論