算法设计技术与方法报告_西电公茂果老师授课
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安电子科技大学作业题目算法设计技术与方法实验报告
专业名称计算机系统结构
班级
学生姓名
学生学号
二0一四年十二月
● 1.分别实现多项式求值的四种运算,若针对不同规模的输入值a,各算法的运行时间,问题规模n分别取10,50,100,150,200,300,400,500,10000,20000,50000,100000时绘制四种算法运行时间的比较图。
实验代码:
num=[10 50 100 150 200 300 400 500 10000 20000 50000 100000];
x=input('please enter x:')
for m=1:12
a=rand(1,num(m)+1);
tic;
p1(m)=polyval(a,x);
t1(m)=toc;
tic;
p2(m)=0;
for i=1:num(m)+1
p2(m)=p2(m)+a(i)*x^(i-1);
t2(m)=toc;
end
tic;
p3(m)=a(1);
q=1;
for j=2:num(m)+1
q=q*x;
p3(m)=p3(m)+a(j)*q;
t3(m)=toc;
end
tic;
p4(m)=a(num(m)+1);
for k=1:num(m);
p4(m)=x*p4(m)+a(num(m)+1-k);
t4(m)=toc;
end
end
semilogx(num,t1,'b+',num,t2,'gx',num,t3,'r*',num,t4,'ko');
xlabel('num=10,50,100,150,200,300,400,500,10000,20000,50000,100000' ) ;
ylabel('time');
title('The comparison chart of four different methods for polyval')
运行结果:
结果分析:运行结果途中蓝色“+”代表采用MATLAB自带的多项式求值函数polyval实现时的时间开销。
绿色“x”代表采用P=P+a i x i的实现方式的时间开销,其理论时间复杂度为O(n2)。
红色“*”代表采用Q=Qx,P=P+a i Q的实现方式的时间开销,其理论时间复杂度为O(n)。
黑色“o”代表采用P=xP+a n-i的实现方式的时间开销,其理论时间复杂度为O(n)。
从几种实现方式的运行结果图可以看出MATLAB自带的多项式求值函数效率是最高的,“o”代表的方式时间效率次之,而“x”代表的实现方式时间效率最差,随着问题规模的扩大,它们的时间效率差别体现的越明显,MATLAB自带的多项式求值函数在解决大规模的多项式求职方面具有明显的时间效率优势。
● 2. 分别实现矩阵相乘的3种算法,比较三种算法在矩阵大小分别为22×22 ,23 ×23 ,24×24,25×25, 26 ×26, 27×27 ,28×28, 29×29 ,210×210,211×211, 212×212时的运行时间与MATLAB自带的矩阵相乘的运行时间,绘制时间对比图。
实验代码:
num=[2^2,2^3,2^4,2^5,2^6,2^7,2^8,2^9,2^10,2^11]
%num=[2^2,2^3,2^4,2^5]
for m=1:10
A=round(rand(num(m)));
B=round(rand(num(m)));
tic;
C1=A*B;
t1(m)=toc;
tic;
C2=zeros(num(m));
for i=1:num(m)
for k=1:num(m)
for j=1:num(m)
C2(i,j)=C2(i,j)+A(i,k)*B(k,j);
end
end
end
t2(m)=toc;
A11=A(1:num(m)/2,1:num(m)/2);
A12=A(1:num(m)/2,num(m)/2+1:num(m));
A21=A(num(m)/2+1:num(m),1:num(m)/2);
A22=A(num(m)/2+1:num(m),num(m)/2+1:num(m)); B11=B(1:num(m)/2,1:num(m)/2);
B12=B(1:num(m)/2,num(m)/2+1:num(m));
B21=B(num(m)/2+1:num(m),1:num(m)/2);
B22=B(num(m)/2+1:num(m),num(m)/2+1:num(m)); tic;
C3=zeros(num(m));
C11=A11*B11+A12*B21;
C12=A11*B12+A12*B22;
C21=A21*B11+A22*B21;
C22=A21*B12+A22*B22;
C3=[C11 C12;C21 C22];
t3(m)=toc;
tic;
C4=zeros(num(m));
M1=A11*(B12-B22);
M2=(A11+A12)*B22;
M3=(A21+A22)*B11;
M4=A22*(B21-B11);
M5=(A11+A22)*(B11+B22);
M6=(A12-A22)*(B21+B22);
M7=(A11-A21)*(B11+B12);
C11=M5+M4-M2+M6;
C12=M1+M2;
C21=M3+M4;