算法上机报告汇总.docx
- 文档编号:8579546
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:23
- 大小:68.21KB
算法上机报告汇总.docx
《算法上机报告汇总.docx》由会员分享,可在线阅读,更多相关《算法上机报告汇总.docx(23页珍藏版)》请在冰豆网上搜索。
算法上机报告汇总
算
法
上
机
报
告
上机题目:
1.使用合并-查找数据结构,实现估计渗漏(Percolation)问题阈值的程序。
思路分析:
使用union-found算法,利用quick-union方法,定义一个N*N的矩阵,依次从1-N*N编号,在模拟渗漏问题时采用一种流动的思想,当按序号增大的顺序一次判断该块是否被打开,按照老师课件上的提示在顶部和底部各设置一个点,顶部点和第一排所有点都联通,底部点和最后一排所有点都联通,流动完之后判断这两个点是否联通即可。
源代码:
packageAssignments;
importjava.util.Scanner;
publicclassPercolation
{
privateboolean[]matrix;
privateintrow,col;
privateWeightedQuickUnionUFwquUF;
privateWeightedQuickUnionUFwquUFTop;
privatebooleanalreadyPercolates;
publicPercolation(intN)
{
if(N<1)
thrownewIllegalArgumentException("IlleagalArgument");
wquUF=newWeightedQuickUnionUF(N*N+2);
wquUFTop=newWeightedQuickUnionUF(N*N+1);
alreadyPercolates=false;
row=N;
col=N;
matrix=newboolean[N*N+1];
}
privatevoidvalidate(inti,intj)
{
if(i<1||i>row)
thrownewIndexOutOfBoundsException("rowindexioutofbounds");
if(j<1||j>col)
thrownewIndexOutOfBoundsException("colindexjoutofbounds");
}
publicvoidopen(inti,intj)
{
validate(i,j);
intcurIdx=(i-1)*col+j;
matrix[curIdx]=true;
if(i==1)
{
wquUF.union(curIdx,0);
wquUFTop.union(curIdx,0);
}
if(i==row)
{
wquUF.union(curIdx,row*col+1);
}
int[]dx=
{1,-1,0,0};
int[]dy=
{0,0,1,-1};
for(intdir=0;dir<4;dir++)
{
intposX=i+dx[dir];
intposY=j+dy[dir];
if(posX<=row&&posX>=1&&posY<=row&&posY>=1&&isOpen(posX,posY))
{
wquUF.union(curIdx,(posX-1)*col+posY);
wquUFTop.union(curIdx,(posX-1)*col+posY);
}
}
}
publicbooleanisOpen(inti,intj)
{
validate(i,j);
returnmatrix[(i-1)*col+j];
}
publicbooleanisFull(inti,intj)
{
validate(i,j);
intcurIdx=(i-1)*col+j;
if(wquUFTop.find(curIdx)==wquUFTop.find(0))
returntrue;
returnfalse;
}
publicbooleanpercolates()
{
if(alreadyPercolates)
returntrue;
if(wquUF.find(0)==wquUF.find(row*col+1))
{
alreadyPercolates=true;
returntrue;
}
returnfalse;
}
publicstaticvoidmain(String[]args)
{
Percolationperc=newPercolation
(2);
perc.open(1,1);
perc.open(1,2);
perc.open(2,1);
System.out.println(perc.percolates());
}
}
packageAssignments;
importjava.util.Scanner;
publicclassPercolationStats
{
privatedouble[]x;
privateintexpTimes;
publicPercolationStats(intN,intT)
{
if(N<=0||T<=0)
thrownewIllegalArgumentException("IlleagalArgument");
x=newdouble[T+1];
expTimes=T;
for(inti=1;i<=T;++i)
{
Percolationperc=newPercolation(N);
boolean[]isEmptySiteLine=newboolean[N+1];
intnumOfLine=0;
while(true)
{
intposX,posY;
do
{
posX=StdRandom.uniform(N)+1;
posY=StdRandom.uniform(N)+1;
}while(perc.isOpen(posX,posY));
perc.open(posX,posY);
x[i]+=1;
if(!
isEmptySiteLine[posX])
{
isEmptySiteLine[posX]=true;
numOfLine++;
}
if(numOfLine==N)
{
if(perc.percolates())
break;
}
}
x[i]=x[i]/(double)(N*N);
}
}
publicdoublemean()
{
doublemu=0.0;
for(inti=1;i<=expTimes;++i)
{
mu+=x[i];
}
returnmu/(double)expTimes;
}
publicdoublestddev()
{
if(expTimes==1)
returnDouble.NaN;
doublesigma=0.0;
doublemu=mean();
for(inti=1;i<=expTimes;++i)
{
sigma+=(x[i]-mu)*(x[i]-mu);
}
returnMath.sqrt(sigma/(double)(expTimes-1));
}
publicdoubleconfidenceLo()
{
doublemu=mean();
doublesigma=stddev();
returnmu-1.96*sigma/Math.sqrt(expTimes);
}
publicdoubleconfidenceHi()
{
doublemu=mean();
doublesigma=stddev();
returnmu+1.96*sigma/Math.sqrt(expTimes);
}
publicstaticvoidmain(String[]args)
{
intN=Integer.parseInt(args[0]);
intT=Integer.parseInt(args[1]);
PercolationStatspercStats=newPercolationStats(N,T);
StdOut.printf("mean=%f\n",percStats.mean());
//StdOut.printf("stddev=%f\n",percStats.stddev());
StdOut.printf("95%%confidenceinterval=(%f,%f)\n",
percStats.confidenceLo(),percStats.confidenceHi());
}
}
运行结果:
2.Youareaskedtowriteandperformanempiricalcomplexityanalysisofthefollowingsortingalgorithms:
//实现并做性能分析比较
(1)Insertionsort;
(2)Mergesort(pleasewritetherecursivemergesortandbottom-upmergesort);
(3)Quicksort(pleasewritearandomizedquicksortmethodascoveredinclass);
(4)QuicksortwithDijkstra2-waypartitioning;
(5)*QuicksortwithBentley-McIlroy3-waypartitioning.
Notethatthequestionwithastarisoptional.
源代码:
packagealgo;
importjava.util.*;
classstatistics
{
statistics()
{
run_time=0;
run_count=0;
assign_count=0;
}
statistics(longru,intrun,intas)
{
run_time=ru;
run_count=run;
assign_count=as;
}
statistics(longru,intrun,intas,ArrayList
{
run_time=ru;
run_count=run;
assign_count=as;
res=ls;
}
longrun_time;
intrun_count;
intassign_count;
ArrayList
}
classSort_Coll
{
staticintmin(Integerlhs,Integerrhs)
{
returnlhs lhs: rhs; } staticstatisticsinsertion_sort(ArrayList { longbeg_time=System.currentTimeMillis(); intassign_count=0,run_count=0; intlen=lst.size(); for(inti=1,j=0;i { intelem=lst.get(i); for(j=i-1;j>=0;--j) { ++run_count; if(lst.get(j)>elem) { lst.set(j+1,lst.get(j)); ++assign_count; } else break; } lst.set(j+1,elem); } returnnewstatistics(System.currentTimeMillis()-beg_time,run_count,assign_count,lst); } //[) staticstatisticsmerge(ArrayList { longbeg_time=System.currentTimeMillis(); intrun_count=0,assign_count=0; ArrayList for(inti=beg,l=beg,r=mid;i { ++assign_count; ++run_count; if(l>=mid) { lst.set(i,tmp.get(r)); ++r; } elseif(r>=en) { lst.set(i,tmp.get(l)); ++l; } elseif(tmp.get(l) { lst.set(i,tmp.get(l)); ++l; } else { lst.set(i,tmp.get(r)); ++r; } } returnnewstatistics(System.currentTimeMillis()-beg_time,run_count,assign_count); } //[) staticstatisticsmerge_sort(ArrayList { statisticss0=newstatistics(),s1=newstatistics(),s2=newstatistics(); longbeg_time=System.currentTimeMillis(); if(en>beg+1) { intmid=(beg+en)/2; s0=merge_sort(lst,beg,mid); s1=merge_sort(lst,mid,en); s2=merge(lst,beg,mid,en); } returnnewstatistics(System.currentTimeMillis()-beg_time,s0.run_count+s1.run_count+s2.run_count,s0.assign_count+s1.assign_count+s2.assign_count,lst); } staticstatisticsmerge_sort_u(ArrayList { statisticss0=newstatistics(); longbeg_time=System.currentTimeMillis(); for(intstp=1;stp for(inti=beg;(i+1)*stp { statisticss1=merge(lst,beg+i*stp,beg+(i+1)*stp,min(beg+(i+2)*stp,en)); s0.assign_count+=s1.assign_count; s0.run_count+=s1.run_count; } returnnewstatistics(System.currentTimeMillis()-beg_time,s0.run_count,s0.assign_count,lst); } staticintrandom_part(ArrayList { intrun_count=0,assign_count=0; /*Choosearandomnumberandswitchitwithlastnumber*/ Randomrnd=newRandom(); intr=rnd.nextInt(en-beg)+beg; inttem=lst.get(en-1); lst.set(en-1,lst.get(r)); lst.set(r,tem); intkey=lst.get(en-1); inti=beg; for(intj=beg;j { ++s.run_count; if(lst.get(j)<=key) { intv=lst.get(j); lst.set(j,lst.get(i)); lst.set(i,v); s.assign_count+=2; ++i; } } lst.set(en-1,lst.get(i)); lst.set(i,key); returni; } //[) staticstatisticsquick_sort(ArrayList { statisticss0=newstatistics(),s1=newstatistics(),s2=newstatistics(); longbeg_time=System.currentTimeMillis(); if(en>beg) { intkey=random_part(lst,beg,en,s0); s1=quick_sort(lst,beg,key); s2=quick_sort(lst,key+1,en); } returnnewstatistics(System.currentTimeMillis()-beg_time,s0.run_count+s1.run_count+s2.run_count,s0.assign_count+s1.assign_count+s2.assign_count,lst); } //[) staticstatisticsdijkstra_sort(ArrayList { longbeg_time=System.currentTimeMillis(); intrun_count=0,assign_count=0; statisticss1=newstatistics(),s2=newstatistics(); if(en>beg+1) { inti=beg,le=beg,gt=en,key=lst.get(en-1); while(i { ++run_count; if(lst.get(i) { intt=lst.get(i); lst.set(i,lst.get(le)); lst.set(le,t); assign_count+=2; ++i; ++le; } elseif(lst.get(i)>key) { --gt; intt=lst.get(i); lst.set(i,lst.get(gt)); lst.set(gt,t); assign_count+=2; } else { ++i; } } s1=dijkstra_sort(lst,beg,le); s2=dijkstra_sort(lst,gt,en); } returnnewstatistics(System.currentTimeMillis()-beg_time,run_count+s1.run_count+s2.run_count,assign_count+s1.assign_count+s2.assign_count,lst); } staticbooleantest_sort_res(ArrayList { booleanrig=true; Integerlast_num=newInteger(0); fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 上机 报告 汇总