有人能告诉我波纹管代码的复杂性。
std::cin>>n1;
int ctr=0;
for(int i=2;i<=n1;i++)
{
if(i>=n/2&&ctr==0)
{
cout << " You entered a prime no";
break;
}
else if(n1%i==0)
{
ctr++;
cout<<i<<" ";
n1/=i;
}
}
有人可以建议如何计算涉及多个if-else条件的此类循环的复杂性?
答案 0 :(得分:2)
内循环是O(1)
。外循环的复杂性取决于代码对n
的作用,并且您没有显示代码,因此它可以是任何代码。
关于一般准则:渐近复杂性始终与数量有关。通常,这被视为输入大小(无论对于要解决的问题意味着什么)并且表示为n
。在你的情况下,它很可能是变量n
,因为它用于循环停止条件。
一旦知道了您想要复杂性的数量(n
),就很简单了。不依赖n
的操作是O(1)
。对O(f)
的每个值执行n
工作量的操作为O(n * f)
,其中f
确实可以是n
的函数。递归会变得更棘手,但这是基本的概述。
答案 1 :(得分:1)
int n;
std::cin >> n;
// O(oo) e.g. O(infinite)
while( n > 0 ) {
// for loop is O(1)
for(int i = 1 ; i <= 9 ; i++) {
if( n % i == 0) {
//piece of code involving O(1)complexity.
}
}
// this makes the while loop O(1)
if ( n == 10000000000000 ) {
break;
}
}
此算法为O(1)
答案 2 :(得分:0)
for循环的复杂性是O(n)
,其中n是迭代次数......
这里n=9
,但结论是循环一般是稳定的(O(1)
)并且与迭代次数无关