Java 如何计算循环中的操作数并给出θ特征
我只是想确定我做的是否正确。我试图计算java中最坏情况下执行的操作数Java 如何计算循环中的操作数并给出θ特征,java,count,Java,Count,我只是想确定我做的是否正确。我试图计算java中最坏情况下执行的操作数 int sum = 0; for (int i = 0; i < n; i++ ) sum++; int和=0; 对于(int i=0;i
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以及Iint 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时:执行零
ssum++
- 当i==1时:正好执行一个
get(当a==0时)sum++
- 当i==2:2
s(a==0和a==1)sum++
- 当i==3:3
s(a==0、a==1和a==2)sum++
- 当i==n-1:n-1
s(a==0,a==1,…最后a==n-1)sum++
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时:执行零
ssum++
- 当i==1时:正好执行一个
get(当a==0时)sum++
- 当i==2:2
s(a==0和a==1)sum++
- 当i==3:3
s(a==0、a==1和a==2)sum++
- 当i==n-1:n-1
s(a==0,a==1,…最后a==n-1)sum++
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++的次数