Java 寻找增长函数&;大O

Java 寻找增长函数&;大O,java,function,big-o,Java,Function,Big O,对于下面的每个代码段,我需要说明增长函数以及顺序。我很确定我已经正确地确定了顺序,但是我很难看到一个包含常量和所有内容的完整函数是如何从我提供的内容中派生出来的 以下是代码片段: // CODE #1 for (int count=0; count<n; count++) { for (int count2=0; count2<n; count2=count2+2) { System.out.println(count + ", " + count2)

对于下面的每个代码段,我需要说明增长函数以及顺序。我很确定我已经正确地确定了顺序,但是我很难看到一个包含常量和所有内容的完整函数是如何从我提供的内容中派生出来的

以下是代码片段:

// CODE #1
for (int count=0; count<n; count++)
{
    for (int count2=0; count2<n; count2=count2+2)
    {
        System.out.println(count + ", " + count2);
     }
}

// CODE #2
for (int count=0; count<n; count++)
{
    for (int count2=1; count2<n; count2=count2*2)
     {
         System.out.println(count + ", " + count2);
    }     
}

// CODE #3
for (int count = 0; count < n; count++) {
    printsum(count); }

// Here’s the method:

public void printsum(int count) {
    int sum = 0;
    for (int i=1; i<count; i++) {
        sum += i; 
    }
    System.out.println(sum + ": " + sum); 
    }

// CODE #4
for (int count = 0; count < n; count++) 
{
    printsum(count); 
}

// Here’s the method:

public void printsum(int count) { 
    int sum = 0;
    sum = count * (count + 1)/2; 
    System.out.println(“sum : " + sum);
}
//代码#1

对于(int count=0;count,构建增长率函数只需查找每个特定代码段相对于(n)的计算次数。您需要合并变量被赋值或初始化的次数,以及循环检查它们是否运行的次数

我可以帮你处理代码#1,其余的留给你

我们将从评估外部for循环开始。将分配多少次变量计数?这段逻辑只执行一次,因此这里的答案是1。循环将执行多少次评估计数(小于)n?这部分代码将总共计算n+1次,循环实际运行的n次,以及停止循环处理的一次额外计算。最后,在外部for循环中,count变量将增加多少次(count++)?这将总共发生n次

到目前为止我们有什么

到目前为止,我们的外部for循环为我们提供了一个函数:

GRF = 1 + n+1 + n
现在开始我们的内部for循环。整个内部for循环将执行多少次?内部for循环将总共执行n次。这意味着我们将需要将所有内部for循环进程乘以n。我们的GRF最终将如下所示:

GRF = 1 + n+1 + n + n(processes of the inner for loop)
GRF = 1 + n+1 + n + n( 1 + (n+1)/2 + n/2 + n/2)
暂时忽略n的乘法,我们将继续计算内部for循环,就像我们从上面计算外部for循环一样。变量count2的初始化将发生多少次?这将发生一次。代码count2将发生多少次(小于)n要计算?这部分有点棘手,因为您需要查看count2变量的增量率。它在循环的每次执行过程中都会以2的值递增。这意味着变量的增长速度将是该变量的两倍,并且循环的计算次数仅为该变量启用时的一半y递增1,所以我们有(n+1)/2.记住+1是导致循环失败的计算的原因,这里循环的计算次数仅为内部循环声明的一半。现在,对于内部循环声明的最后一部分,count2变量将增加多少次?这将发生n/2次。System.out.println()将增加多少次是否在内部for循环中退出?这将与count2变量的递增次数相同,因此将发生n/2次

现在我们需要将所有这些求值插入上面GRF的内部for循环部分。我们最终得到如下结果:

GRF = 1 + n+1 + n + n(processes of the inner for loop)
GRF = 1 + n+1 + n + n( 1 + (n+1)/2 + n/2 + n/2)
让我们做一点代数

1 + n+1 + n + n( 1 + n/2 + 1/2 + n/2 + n/2)
1 + n+1 + n + n + (n^2)/2 + n/2 + (n^2)/2 + (n^2)/2
3(n^2/2) + 7n/2 + 2

好了。一个增长率函数。为了得到O(),我们只需保留最大项,去掉所有常数和因子,就得到了一个O(n^2)。

构建增长率函数只需找出每段代码相对于(n)的计算次数。您需要合并变量被分配或初始化的次数,以及循环检查它们是否运行的次数

我可以帮你处理代码#1,其余的留给你

我们将从评估外部for循环开始。将分配多少次变量计数?这段逻辑只执行一次,因此这里的答案是1。循环将执行多少次评估计数(小于)n?这部分代码将总共计算n+1次,循环实际运行的n次,以及停止循环处理的一次额外计算。最后,在外部for循环中,count变量将增加多少次(count++)?这将总共发生n次

到目前为止我们有什么

到目前为止,我们的外部for循环为我们提供了一个函数:

GRF = 1 + n+1 + n
现在开始我们的内部for循环。整个内部for循环将执行多少次?内部for循环将总共执行n次。这意味着我们将需要将所有内部for循环进程乘以n。我们的GRF最终将如下所示:

GRF = 1 + n+1 + n + n(processes of the inner for loop)
GRF = 1 + n+1 + n + n( 1 + (n+1)/2 + n/2 + n/2)
暂时忽略n的乘法,我们将继续计算内部for循环,就像我们从上面计算外部for循环一样。变量count2的初始化将发生多少次?这将发生一次。代码count2将发生多少次(小于)n要计算?这部分有点棘手,因为您需要查看count2变量的增量率。它在循环的每次执行过程中都会以2的值递增。这意味着变量的增长速度将是该变量的两倍,并且循环的计算次数仅为该变量启用时的一半y递增1,所以我们有(n+1)/2.记住+1是导致循环失败的计算的原因,这里循环的计算次数仅为内部循环声明的一半。现在,对于内部循环声明的最后一部分,count2变量将增加多少次?这将发生n/2次。System.out.println()将增加多少次是否在内部for循环中退出?这将与count2变量的递增次数相同,因此将发生n/2次

现在我们需要将所有这些求值插入上面GRF的内部for循环部分。我们最终得到如下结果:

GRF = 1 + n+1 + n + n(processes of the inner for loop)
GRF = 1 + n+1 + n + n( 1 + (n+1)/2 + n/2 + n/2)
让我们做一点代数

1 + n+1 + n + n( 1 + n/2 + 1/2 + n/2 + n/2)
1 + n+1 + n + n + (n^2)/2 + n/2 + (n^2)/2 + (n^2)/2
3(n^2/2) + 7n/2 + 2
好了,一个增长率函数。为了得到O(),我们只需保留最大项,去掉所有常数和因子