Временная сложность if с несколькими условиями - PullRequest
0 голосов
/ 07 мая 2020

Я не понимаю, одинаковы ли временные сложности этих двух кодов или разные.

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

code 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 ]

2 голосов
/ 07 мая 2020

В вашем случае вы делаете то же самое для каждого элемента на входе один раз.
if..else - это всего лишь одно обычное выражение, которое вы выполняете для каждого элемента один раз. Это не увеличивает и не уменьшает время выполнения / сложность. Ваш алгоритм - O (1). Если в соответствии с кодом lizard.ws 2 эффективен, это может быть связано с тем, что каждый раз в коде 1 вы должны проверять все условия, несмотря на какое-либо одно, а в коде 2 вы проверяете только один

1 голос
/ 07 мая 2020

Временные сложности обоих примеров одинаковы. Тем более, что у вас не переменное количество элементов, а фиксированное количество. Поскольку это фиксированное число, временная сложность равна O (1), но если бы numElements (который жестко запрограммирован на 7) был переменным, временная сложность была бы O (n).

...