计算函数调用中的基本操作
Counting basic operations in function call
我得到了一个简单的伪代码,并告诉我通过计算函数 myMethod() 执行的大致操作数来确定函数 myMethod() 的大 O 运行 时间。我不确定的是,在函数 myMethod() 的 while 循环中有一个对 doIt() 的函数调用,其中有另一个 while 循环。我知道我需要在 doIt() 中包含操作,但是我不确定它是否应该算作 n 或 n^2,因为它是一个单独的函数,尽管它是 while 循环中的 while 循环。
我已经在各自的行旁边写下了我认为每行的基本操作数,我希望得到一些关于这个问题的指导,因为我在互联网上四处看看,但关于这个特定的运气不太好问题。
static int doIt(int n)
{
count = 0 //1
j=1 //1
while j < n //n x n
{
count = count +1 //n x n
j=j+2 //n x n
}
return count //1
}
static int myMethod (int n)
{
i = 1 //1
while(i<n) //log n
{
dolt(i) //log n
i = ix2 //log n
}
return 1; //1
}
首先,您的 doIt
函数是一个基本的 while 循环。我不知道 n*n
是什么意思,但那个循环不是 O(n^2)
,它是 O(N)
因为它执行了 n/2
次——我们可以写成 1/2 * n
,并且由于我们不关心写 [=31=] 符号的常量,我们可以说 doIt
的 Big-O 复杂度为 O(N)
您正确地将 myMethod
的循环识别为 log(N)
时间。由于 doIt
函数在 O(N)
时间内运行 - myMethod
的总体复杂度是 log(N)
外循环的复杂度乘以 doIt
的复杂度 -所以 log(N) * N
等于 O(nlog(n))
我得到了一个简单的伪代码,并告诉我通过计算函数 myMethod() 执行的大致操作数来确定函数 myMethod() 的大 O 运行 时间。我不确定的是,在函数 myMethod() 的 while 循环中有一个对 doIt() 的函数调用,其中有另一个 while 循环。我知道我需要在 doIt() 中包含操作,但是我不确定它是否应该算作 n 或 n^2,因为它是一个单独的函数,尽管它是 while 循环中的 while 循环。
我已经在各自的行旁边写下了我认为每行的基本操作数,我希望得到一些关于这个问题的指导,因为我在互联网上四处看看,但关于这个特定的运气不太好问题。
static int doIt(int n)
{
count = 0 //1
j=1 //1
while j < n //n x n
{
count = count +1 //n x n
j=j+2 //n x n
}
return count //1
}
static int myMethod (int n)
{
i = 1 //1
while(i<n) //log n
{
dolt(i) //log n
i = ix2 //log n
}
return 1; //1
}
首先,您的 doIt
函数是一个基本的 while 循环。我不知道 n*n
是什么意思,但那个循环不是 O(n^2)
,它是 O(N)
因为它执行了 n/2
次——我们可以写成 1/2 * n
,并且由于我们不关心写 [=31=] 符号的常量,我们可以说 doIt
的 Big-O 复杂度为 O(N)
您正确地将 myMethod
的循环识别为 log(N)
时间。由于 doIt
函数在 O(N)
时间内运行 - myMethod
的总体复杂度是 log(N)
外循环的复杂度乘以 doIt
的复杂度 -所以 log(N) * N
等于 O(nlog(n))