什么是这个算法的大哦?

时间:2014-07-22 07:28:28

标签: c# algorithm c#-4.0 data-structures big-o

对于这种代码和平的最佳案例分析和最坏情况分析是什么?!它变得有点复杂了。帮助pleaseeee!我们会根据不同的输入有不同的大哦?或者对于最好的情况和最坏的情况,大的哦会是一样的吗?

int n = int.Parse(Console.ReadLine());
int i =1,j,k;
while(i<=n)
{
    for(j=1;j<=i;j++)
    {
        if(j%3==0)
        {
            for(k=1;k<=(n/2);k++)
            {
                Console.Write("*");
            }
        }
        else if(j%3==1)
        {
            k=j;
            while(k>=1)
            {
                Console.Write("@");
                k--;
            }
        }
        else
        {
            for(k=1;k<=(j%3);k++)
            {
                Console.Write("$");
            }
        }
    }
    i++;
}

1 个答案:

答案 0 :(得分:4)

这是课堂作业吗?我有一种感觉,你要我们为你做功课。

简短的回答是算法是O(n ^ 3)。

从控制台读取n的值。

外部循环是i = 1 .. n(我只是在循环中递增,即没有跳过任何步骤)。

第二个循环是j = 1 .. i(j只在循环中递增,即不跳过任何步骤)。

最内层循环,至少在(j%3 == 0)为k = 1 ... n / 2的情况下。

因此实现此算法需要~3 ^ 3步。

j从1开始的事实...我的意思是,平均而言,j = 1 .. n / 2,使得i / j循环需要(1/2)* n ^ 2步,这仍然是(N ^ 2)。

只有在(j%3 == 0)的情况下,最内层循环才需要n / 2步这一事实意味着它平均需要(1/3)*(n / 2)步,或者( 1/6)* n步骤。

结合最外面的两个循环(1/12)* n ^ 3步,这是一个O(n ^ 3)算法。