Java 如何计算循环中的操作数并给出θ特征

Java 如何计算循环中的操作数并给出θ特征,java,count,Java,Count,我只是想确定我做的是否正确。我试图计算java中最坏情况下执行的操作数 int sum = 0; for (int i = 0; i < n; i++ ) sum++; int和=0; 对于(int i=0;i

我只是想确定我做的是否正确。我试图计算java中最坏情况下执行的操作数

int sum = 0;
    for (int i = 0; i < n; i++ )
    sum++;
int和=0;
对于(int i=0;i
操作数是2+3n还是3+3n

我通过计算“2”的int sum=0和int I=0以及I 但无论哪种方式,θ表征都是Θ(n)吗

现在,如果有这样的嵌套for循环,该怎么办:

int sum = 0;
    for (int i = 0; i < n; i++ )
        for (int a = 0; a < i; a++)
            sum++;
int和=0;
对于(int i=0;i
它会是3+n*(6a+2)=6na+2n+3吗?有Θ(n^2)吗


如果我将内部for循环从a它将是3+3n,因为比较将针对
i
的每个值从0运行到
n
。我认为这是O(n)。

它将是3+3n,因为从0到
n
I
的每个值进行比较。我会说那是O(n)。

我会把它算作
3+3n
,因为当
n=0
时,您会执行以下3个命令:

int sum = 0;
int i = 0;
i < n
int和=0;
int i=0;
i
现在当
n!=0
然后执行一次声明(
2
),每次循环执行一次命令(
3n
)和最终比较(失败;
1
)。这使得
3+3n


是的,那将是Θ(n)(以及O(n)和O(n))。

我将其计算为
3+3n
,因为当
n=0
时,您将执行以下3个命令:

int sum = 0;
int i = 0;
i < n
int和=0;
int i=0;
i
现在当
n!=0
然后执行一次声明(
2
),每次循环执行一次命令(
3n
)和最终比较(失败;
1
)。这使得
3+3n

是的,那就是Θ(n)(以及O(n)和O(n))。

是的,没错。寻找一个数学定义

使用2+3n或3+3n并不重要。您有lim_n->infty((3+3n)/n)=3(lim sup和lim inf在这里是相同的)。因为这个极限(大于0而不是无穷大),你知道它是大θn

在第二个示例中,不能使用内部循环变量(a或i)。sum++操作的数量:

  • 当i==0时:执行零
    sum++
    s
  • 当i==1时:正好执行一个
    sum++
    get(当a==0时)
  • 当i==2:2
    sum++
    s(a==0和a==1)
  • 当i==3:3
    sum++
    s(a==0、a==1和a==2)
  • 当i==n-1:n-1
    sum++
    s(a==0,a==1,…最后a==n-1)
这些都是代码中的
sum++
s。让我们把它们加起来:

0 + 1 + 2 + ... + n - 1
这与(n-1)(n-2)/2相同

即我们有Θ(n^2+n)。a++和a是的,没错。寻找一个数学定义

使用2+3n或3+3n并不重要。您有lim_n->infty((3+3n)/n)=3(lim sup和lim inf在这里是相同的)。因为这个极限(大于0而不是无穷大),你知道它是大θn

在第二个示例中,不能使用内部循环变量(a或i)。sum++操作的数量:

  • 当i==0时:执行零
    sum++
    s
  • 当i==1时:正好执行一个
    sum++
    get(当a==0时)
  • 当i==2:2
    sum++
    s(a==0和a==1)
  • 当i==3:3
    sum++
    s(a==0、a==1和a==2)
  • 当i==n-1:n-1
    sum++
    s(a==0,a==1,…最后a==n-1)
这些都是代码中的
sum++
s。让我们把它们加起来:

0 + 1 + 2 + ... + n - 1
这与(n-1)(n-2)/2相同


即我们有Θ(n^2+n)。a++和a如果每行只有一个语句,那么计算每个语句的执行次数可能更容易:

int sum = 0;     // 1 time
int i = 0;       // 1 time
while (i < n) {  // n+1 times
  sum++;         // n times
  i++;           // n times
}

因此,
T(n)=3*n+3+n*(n-1)+n*(n+1)/2=Θ(n^2)

如果每行只有一个语句,那么计算每个语句的执行次数可能更容易:

int sum = 0;     // 1 time
int i = 0;       // 1 time
while (i < n) {  // n+1 times
  sum++;         // n times
  i++;           // n times
}

因此,
T(n)=3*n+3+n*(n-1)+n*(n+1)/2=Θ(n^2)

在什么操作定义下?(++是你的例子中的3个运算…?)@meriton,我假设++只是1个运算,在什么定义下的运算?(++是你的例子中的3个运算…?)@meriton,我假设++只是1个运算我理解Θ(n^2)部分,但我仍然有点困惑如何计算嵌套循环中的运算。像这样的?3+(n(n+1))/2=x^2/2+x/2+3?我理解Θ(n^2)部分,但我仍然有点困惑如何计算嵌套循环中的操作。像这样的?3+(n(n+1))/2=x^2/2+x/2+3?@Cooper,“n*(n-1)”来自哪里?由于summ++和a++,应该有+2*(n-1=n*(n-1)/2吗?同样,如果问题是给出θ特征,它是在问“3*n+3+n*(n-1)+n*(n+1)/2”还是“Θ(n^2)”?
n*(n-1)
n*(n-1)/2+n*(n-1)/2
的结果,这是
sum++的次数
a++被执行。@Cooper,“n*(n-1)”是从哪里来的?由于summ++和a++,应该有+2*(n-1=n*(n-1)/2吗?同样,如果问题是给出θ特征,它是在问“3*n+3+n*(n-1)+n*(n+1)/2”还是“Θ(n^2)”?
n*(n-1)
n*(n-1)/2+n*(n-1)/2
的结果,这是
sum++的次数