[英]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.