具有多个条件的“ if”的时间复杂度

时间:2020-05-07 09:59:20

标签: c++ time-complexity

我很困惑这两个代码的时间复杂度是相同还是不同。

code1

#include<iostream>

using namespace std;

bool check(int a[])
{
  if(a[0]==1 && a[1]==1 && a[2]==1 && a[3]==1 && a[4]==1 && a[5]==1 && a[6]==1)
        return true;
   return false;
}

int main()
{
    int a[7] = {1,1,1,1,1,1,1};
    if(check(a))
       cout<<"yes"<<endl;
    else
       cout<<"no"<<endl;
    return 0;
}

代码2

#include<iostream>

using namespace std;

bool check(int a[])
{
    for(int i=0;i<7;i++)
    {
        if(a[i]!=1)
            return false;
    }
    return true;
}

int main()
{
    int a[7] = {1,1,1,1,1,1,1};
    if(check(a))
       cout<<"yes"<<endl;
    else
       cout<<"no"<<endl;
    return 0;
}

当我在http://www.lizard.ws在线检查时,它表明代码2的时间复杂度比代码1小。如果为真,为什么?请有人给我原因。

2 个答案:

答案 0 :(得分:2)

对于您而言,您对输入中的每个项目都执行一次相同的操作。
if..else只是对每个项目执行一次的普通声明。它既不增加也不减少运行时间/复杂度。您的算法为O(1)。 如果按照lizard.ws 2的代码有效,则可能是由于每次在代码1中都必须检查所有条件,尽管在代码2中每次都必须检查单个条件

答案 1 :(得分:1)

两个示例的时间复杂度相同。特别是因为您没有可变数量的元素,而是固定数量的元素。由于它是一个固定数字,因此时间复杂度为O(1),但是如果numElements(在7处硬编码)是变量,则时间复杂度将为O(n)。