一个for循环的时间复杂度一定是o(n)吗?

etwdone 2013-05-04 04:05:36
#include<iostream>
#define N 5
using namespace std;
void main()
{
int a[N]={1,2,3,4,5},b[N]={1,1,1,1,1};
int i,j=0;
for(i=0;i<=N;i++)
{
if(i==N)
{
cout<<b[j]<<endl;
i=0;
j++;
}
if(j==N) break;
if(i!=j) b[j]=a[i]*b[j];
}
}
那这个的时间复杂度是多少呢?o(n)还是o(n^2)?
...全文
1387 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Athenacle_ 2013-05-05
  • 打赏
  • 举报
回复
引用 2 楼 etwdone 的回复:
引用 1 楼 Athenacle_ 的回复:
o(n)。   。
为什么呢 能深入分析下吗?循环体实际执行的次数是5*4呀
好吧。。你在循环体里重设了i=0了,,,,我错了
hugett 2013-05-05
  • 打赏
  • 举报
回复
这个。。是O(n^2)的吧。。你的跟这个是等价的。。

	for(int j = 0; j < N; ++j){
		for(int i = 0; i < N; ++i){
			if(i != j) b[j] *= a[i];
		}
		cout<<b[j]<<endl;
	}
eureka_cs 2013-05-05
  • 打赏
  • 举报
回复
O(n^2)
derekrose 2013-05-05
  • 打赏
  • 举报
回复
肯定不是。。
FancyMouse 2013-05-05
  • 打赏
  • 举报
回复
引用 2 楼 etwdone 的回复:
引用 1 楼 Athenacle_ 的回复:
o(n)。   。
为什么呢 能深入分析下吗?循环体实际执行的次数是5*4呀
你没错。这for里j和i本质上构成了一个N进制的2位数,只有当j*N+i>=N^2的时候才退出。复杂度的确是O(n^2)。
flyrack 2013-05-04
  • 打赏
  • 举报
回复
只计算最坏情况下运算的时间
etwdone 2013-05-04
  • 打赏
  • 举报
回复
引用 1 楼 Athenacle_ 的回复:
o(n)。   。
为什么呢 能深入分析下吗?循环体实际执行的次数是5*4呀
Athenacle_ 2013-05-04
  • 打赏
  • 举报
回复
o(n)。   。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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