以下功能的时间复杂度应该是多少?

时间:2015-09-06 07:58:58

标签: c++ c time complexity-theory

这两个功能的时间复杂度是否相同?

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)我是对吗?

2 个答案:

答案 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;
    }
}