这两个功能的时间复杂度是否相同?
void fun1()
{
for(int i=0;i<n;i++)
{
if(i%2==0)c++;
if(i%3==0)c++;
}
}
其他功能是 -
void fun2()
{
for(int i=0;i<n;i++)
{
if(i%2==0)c++;
}
for(int i=0;i<n;i++)
{
if(i%3==0)c++;
}
}
我猜fun1的时间复杂度是O(n),而fun2的时间复杂度是O(2n)我是对吗?
答案 0 :(得分:1)
你对第一个是正确的。它将需要n次操作-O(n)。对于第二个,它将需要2 * n个操作。在大O符号中,系数被忽略,再次为我们留下O(n)。
答案 1 :(得分:-3)
只是测试,你会发现第一个函数比第二个函数快一点。但速度有些变化。这是因为计算机需要再次构建“int = 0”并将其上升为“n”并进行“n”检查。 这段代码比较慢:
#include <iostream>
using namespace std;
int main()
{
int n=10;
for(int i=0;i<n;i++)
{
if(i%2==0)cout<<"i%2"<<endl;
}
for(int i=0;i<n;i++)
{
if(i%3==0)cout<<"i%3"<<endl;
}
}
这更快:
#include <iostream>
using namespace std;
int main()
{
int n=10;
for(int i=0;i<n;i++)
{
if(i%2==0)cout<<"i%2"<<endl;
if(i%3==0)cout<<"i%3"<<endl;
}
}