帮我看看这几个函数的功能和时间复杂度是多少!!!!

borland_boy 2003-03-19 08:53:42
这些都是数据结构的问题,对我来说难度实在太大了

不知道那位高手能帮我把这些函数的 功能和时间复杂度 算出来

0:
int prime(int n)
{
int i=1;
int x =(int)sqrt(n);
while(++i<=x)
if(n%i==0)break;
if(i>x) return 1;
else return 0;
}

1:
int sum1(int n)
{
int p=1,s=0;
for(int i=1;i<=n;i++)
{
p*=i;
s+=p;
}
return s;
}

2:
int sum2(int n)
{
int s=0;
for (int i=0;i<=n;i++)
{
int p=1;
for(int j=1;j<=i;j++)
p*=j;
s+=p;
}
return s;
}

3:
int fun(int n)
{
int i=1,s=1;
while(s<n)
s += ++i;
return i;
}
4:
void UseFile(ifstream &inp, int c[10])
{
for(int i=0;i<10;i++)
c[i]=0;
int x;
while(inp>>x)
{
i=x%10;
c[i]++;
}
}

5:
void mtable(int n)
{
for (int i=1;i<n;i++)
{
for (int j=i;j<n;j++)
cout<<i<<"*"<<j<<"="<<setw(2)<<i*j<<" ";
cout<<endl;
}
}

6:
void cmatrix(int a[M][N], int d)
{
for (int i=0;i<m;i++)
for (int j=0;j<N;j++)
a[i][j] *= d;
}

7:
void matrimult(int a[M][N],int b[N][L], int c[M][L])
{
int i,j,k;
for(i=0;i<M;i++)
for(j=0;j<L;j++)
c[i][j]=0;
for(i=0;i<M;i++)
for(j=0;j<L;j++)
for(k=0;k<N;k++)
c[i][j] += a[i][k]*b[k][j];
}
...全文
232 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
borland_boy 2003-03-19
  • 打赏
  • 举报
回复
3是求一个等差数列的和s = 1+(1+2)+(1+2+3)+...+(1+2+3+...+n),使得s是小于n的最大值。


应该是
3是求一个等差数列的和s = (1+2)+(1+2+3)+...+(1+2+3+...+n),使得s是小于n的最大值。

而且应该是I-1是循环次数
TopCat 2003-03-19
  • 打赏
  • 举报
回复
i是循环的次数。功能还是上面我说的那个。
Siney 2003-03-19
  • 打赏
  • 举报
回复
我怎么不知道功能复杂度,时间复杂度和空间复杂度就可以说明问题了.
topcat的我同意
borland_boy 2003-03-19
  • 打赏
  • 举报
回复
那函数的功能是不是也就不一样了呢

返回的i是什么意思呢
RomanticProgrammer 2003-03-19
  • 打赏
  • 举报
回复
:)
TopCat 2003-03-19
  • 打赏
  • 举报
回复
啊,对,这题算错了,应该是O(sqrt(2n))。
解:
因为s < n,所以L(L-1)/2 < n(L是循环的次数), 解得L < sqrt(2n-1) < sqrt(2n)。
borland_boy 2003-03-19
  • 打赏
  • 举报
回复
那3题的s += ++i;一共需要执行多少步骤呢
TopCat 2003-03-19
  • 打赏
  • 举报
回复
2是求一个等比数列的和s = 1+(1*2)+(1*2*3)+...+(1*2*3*...*n);
3是求一个等差数列的和s = 1+(1+2)+(1+2+3)+...+(1+2+3+...+n),使得s是小于n的最大值。
borland_boy 2003-03-19
  • 打赏
  • 举报
回复
2和3到底是什么意思啊
TopCat 2003-03-19
  • 打赏
  • 举报
回复
第0个很简单,经过了一重sqrt(n)次循环,所以复杂度为O(sqrt(n))
第1个,循环次数为n,所以复杂度为O(n)
第2个,二重循环,循环次数实际是一个等差数列,所以为n(n-1)/2,最高阶为n^2,所以复杂度为O(n^2)
第3个,同1,复杂度为O(n)
第4个,循环次数基于输入值,应该是O(n)
第5个,同2,O(n^2)
第6个,O(m*n)(也是平方阶)
第7个,循环次数为 M*L + M*L*N,显然M*L*N > M*L,所以是O(M*L*N)(立方阶)
---------------------
我不能保证正确性,有错误的话希望指出
borland_boy 2003-03-19
  • 打赏
  • 举报
回复
还有时间复杂度的问题呢?
liugy 2003-03-19
  • 打赏
  • 举报
回复
0-质数
1-阶乘的和
2-和1类似
3-
4-对余数(模10)计数
5-输出乘法表
6-矩阵赋值
7-矩阵乘法
borland_boy 2003-03-19
  • 打赏
  • 举报
回复
不过还是要多谢你们啊
TopCat 2003-03-19
  • 打赏
  • 举报
回复
呵呵,是,我粗心了,没仔细看。我就看了个大概。

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧