簡體   English   中英

以下函數的時間復雜度應該是多少?

[英]what should be the time complexity for the following function?

這兩個函數的時間復雜度一樣嗎??

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) 我對嗎??

你對第一個是正確的。 這將需要 n 次操作 - O(n)。 對於第二個,將需要 2 * n 次操作。 在大 O 符號中,系數被忽略,再次為我們留下 O(n)。

只是測試一下,你會發現第一個函數比第二個函數快一點。 但速度有時會發生變化。 這是因為計算機需要再次構建“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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM