int n = int.Parse(Console.ReadLine());
int i=n;
while(i>1) {
Console.Write(i);
i%=2;
}
和
int n = int.Parse(Console.ReadLine());
int x=0;
for(int i=0;i<=n;++i)
{
for(int j=0;j<=i;++j)
{
for(k=1;k<=n;k++)
{
x++;
}
}
}
和
int n=int.Parse(Console.ReadLine());
int x=0,y=1;
for( int i=n; i > 1 ; i /= 3 )
for(int j=1;j<=n;j*=5)
{
x++;
if ( x < n/2 )
y*=2;
else
y--;
}
据我所知,第一段代码的大O是O(1)而不管输入 n ,第二段代码是O(n ^ 3)再次无论输入如何,我都不确定第三段代码!但我们的老师问我们最好和最坏的情况!没有最好或最坏的!我是对的吗?
答案 0 :(得分:2)
答案 1 :(得分:0)
据我所知,第一段代码的大O是O(1)而不管输入n是什么,对于第二段代码,无论输入如何,它都将是O(n ^ 3)。但我们的老师问我们最好和最坏的情况!没有最好或最坏的!我是对的吗?
是的,没错。
while(i>1) {
i%=2;
}
这将立即完成。你修改为零的任何数字都会给你1或0。
for(int i=0;i<=n;++i)
{
for(int j=0;j<=i;++j)
{
for(k=1;k<=n;k++)
{
}
}
}
对我来说这看起来像O(n^3)
。外循环发生n
次,每次外循环发生时,中间循环平均发生n/2
次,每次外循环发生时内循环发生n-1
次。 n * 2n * (n-1)
简化为O(n^3)
。
最糟糕和最好的情况对于这两者都是相同的:你不能真正选择一系列数字来输入,这会导致复杂性随着它们变大而不遵循相同的渐近模式。