MOOC 数据结构 第一周

1 .有以下用C/C++语言描述的算法,说明其功能:
void fun(double &y,double x,int n)
{
y=x;
while (n>1)
{ y=y*x;
n–;
}
}
解:计算x的n次方。
2 .一个算法的空间复杂度是O(1),那么执行该算法时不需要任何空间,这个说法正确吗?为什么?
解:错误。若一个算法的空间复杂度为O(1),则称此算法为原地工作或就地工作算法。此时是需要空间的。O(1)表示该程序所占用的空间和所用数据量无关。如当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1)。
3.一个算法的执行频度为在这里插入图片描述
其时间复杂度多少?
解:T(n)=O(n)。
4 .设有算法如下:
int Find(int a[], int n, int x)
{ int i;
for (i=0;i<n;i++ )
if (a[i]==x)
return i;
return –1;
}
成功找到x的最好和最坏时间复杂度是多少?
解:该算法的最坏复杂度:W(n)=O(n) (当a[n-1]=x时,比较n次)
该算法的最好复杂度:B(n)=O(1) (当a[0]=x时,比较一次)
5 .设有算法如下:
int Find(ElemType a[ ],int s,int t,ElemType x)
{ int m=(s+t)/2;
if (s<=t)
{ if (a[m]==x)
return m;
else if (x<a[m])
return Find(a,s,m-1,x);
else
return Find(a,m+1,t,x);
}
return -1;
}
分析执行Find(a,0,n-1,x)的时间复杂度。
解:设Find(a,0,n-1,x)的执行时间为T(n)。
T(n)=1 当n=1时
T(n)=T(n/2)+1 当n>1时
不妨设n=2k,即k=log2n.
T(n)=T(n/2)+1 =T(n/22)+2=T(n/23)+3=…=T(n/2k)+ k=T(n)+k=1+k=log2n+1=O(log2n)。
直接记忆:二分法的时间复杂度为O(log2n)。
如果有错误,请评论。

猜你喜欢

转载自blog.csdn.net/weixin_46226815/article/details/107481960