Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在大θΘ;符号_Java_Algorithm_Complexity Theory - Fatal编程技术网

Java 在大θΘ;符号

Java 在大θΘ;符号,java,algorithm,complexity-theory,Java,Algorithm,Complexity Theory,我需要一些帮助来理解使用符号的算法分析: 大O是比较函数最常用的渐近表示法,尽管在许多情况下,对于渐近更紧的界,大O可以用大θΘ代替 我如何一步一步地分析这个算法?我知道最后的答案是ϴ(n²),但我很难看到它。任何帮助都将不胜感激 为了简单起见,您可以假设n=2k,对于某个正整数k inta=0; int i=n*n; 而(i>0){ 对于(int j=0;j0) { 对于(int j=0;j计算a递增的次数: n^2 on the first iteration + n^2 / 2 on th

我需要一些帮助来理解使用符号的算法分析:

大O是比较函数最常用的渐近表示法,尽管在许多情况下,对于渐近更紧的界,大O可以用大θΘ代替

我如何一步一步地分析这个算法?我知道最后的答案是ϴ(n²),但我很难看到它。任何帮助都将不胜感激

为了简单起见,您可以假设n=2k,对于某个正整数k

inta=0;
int i=n*n;
而(i>0){
对于(int j=0;j
基本上,外部循环控制
i
的值。每次循环通过时,
i
被二除。然后循环的初始值是
i
i/2
i/4

内部循环包含
i
计算。如果你把这些加起来,你会得到
i+i/2+i/4+i/8+i/16+<代码>整数a=0,i=n*n;
而(i>0)
{

对于(int j=0;j计算
a
递增的次数:

n^2 on the first iteration
+
n^2 / 2 on the second iteration
+
...
+
n^2 / 2^k on the (k+1)-th iteration
我们有
k=log(n^2)=2*log(n)
,因为我们在每一步都除以
2

所以我们得到了一个几何级数的和,第一项是
n^2
,比率是
1/2
2*log(n)
项,或者为了使事情更简单,第一项是
1
和比率是
2

S = O(2^(2*log(n))) = O([2^log(n)]^2) = O(n^2)

=> The entire algorithm is BigTheta(n^2)

<>我们忽略一个事实:<代码> i=n*n>代码>一分钟,只考虑算法

while(i > 0)
{
    for(int j=0; j<i; j++)
       { a++; }
    i=i/2;
}
while(i>0)
{

对于(int j=0;jj)你已经证明了它是O(n^2),但是为了证明θ(n^2),你还必须证明运行时间(对于大n)是以n^2的倍数为界的。很明显,自从第一次执行j循环以来,它将循环n^2次。@Anonymous你是对的。我总是把O、θ和ω混在一起。我现在编辑。
S = O(2^(2*log(n))) = O([2^log(n)]^2) = O(n^2)

=> The entire algorithm is BigTheta(n^2)
while(i > 0)
{
    for(int j=0; j<i; j++)
       { a++; }
    i=i/2;
}