Time complexity 运行时间计算/算法的复杂性
我必须计算算法的时间复杂度或理论运行时间(给定伪代码),逐行计算为T(n)。我试过了,但有几件事让我困惑。例如,“if”语句的时间复杂度是多少?如何处理嵌套循环?下面是代码以及我的尝试,并对其进行了注释 长度[A]=nTime complexity 运行时间计算/算法的复杂性,time-complexity,big-o,Time Complexity,Big O,我必须计算算法的时间复杂度或理论运行时间(给定伪代码),逐行计算为T(n)。我试过了,但有几件事让我困惑。例如,“if”语句的时间复杂度是多少?如何处理嵌套循环?下面是代码以及我的尝试,并对其进行了注释 长度[A]=n for i = 0 to length[A] - 1 // n - 1 k = i + 1 // n - 2 for j = 1 + 2 to length[A] // (n - 1)(n - 3)
for i = 0 to length[A] - 1 // n - 1
k = i + 1 // n - 2
for j = 1 + 2 to length[A] // (n - 1)(n - 3)
if A[k] > A[j] // 1(n - 1)(n - 3)
k = j // 1(n - 1)(n - 3)
if k != i + 1 // 1(n - 1)
temp = A[i + 1] // 1(n - 1)
A[i + 1] = A[k] // 1(n - 1)
A[k] = temp // 1(n - 1)
Blender是对的,结果是O(n^2):两个嵌套循环,每个循环的迭代计数取决于
n
更详细的解释是:
在本例中,if实际上并不重要:因为O表示法只查看算法的最坏情况执行时间,所以您只需选择总体执行时间最差的执行路径。因为在您的示例中,两个执行路径(k!=i+1
为true或false)对运行时没有进一步的含义,所以您可以忽略它。如果在If
中有第三个嵌套循环,也运行到n
,那么最终将得到O(n^3)
逐行概述:
for i = 0 to length[A] - 1 // n + 1 [1]
k = i + 1 // n
for j = 1 + 2 to length[A] // (n)(n - 3 + 1) [1]
if A[k] > A[j] // (n)(n - 3)
k = j // (n)(n - 3)*x [2]
if k != i + 1 // n
temp = A[i + 1] // n*y [2]
A[i + 1] = A[k] // n*y
A[k] = temp // n*y
[1] 对于i
,0
(true,继续循环),1
(true,继续循环),…,length[A]-1
(true,继续循环),length[A]
(false,中断循环)
[2] 在不知道数据的情况下,如果的条件为真,则必须猜测该条件的频率。通过引入变量0,可以从数学上进行此猜测。如果Blender是正确的,结果是O(n^2):两个嵌套循环,每个循环的迭代计数取决于
n
更详细的解释是:
在本例中,if实际上并不重要:因为O表示法只查看算法的最坏情况执行时间,所以您只需选择总体执行时间最差的执行路径。因为在您的示例中,两个执行路径(k!=i+1
为true或false)对运行时没有进一步的含义,所以您可以忽略它。如果在If
中有第三个嵌套循环,也运行到n
,那么最终将得到O(n^3)
逐行概述:
for i = 0 to length[A] - 1 // n + 1 [1]
k = i + 1 // n
for j = 1 + 2 to length[A] // (n)(n - 3 + 1) [1]
if A[k] > A[j] // (n)(n - 3)
k = j // (n)(n - 3)*x [2]
if k != i + 1 // n
temp = A[i + 1] // n*y [2]
A[i + 1] = A[k] // n*y
A[k] = temp // n*y
[1] 对于i
,0
(true,继续循环),1
(true,继续循环),…,length[A]-1
(true,继续循环),length[A]
(false,中断循环)
[2] 在不知道数据的情况下,如果的条件为真,则必须猜测该条件的频率。通过引入一个变量0(我得到的
O(n^2)
),可以从数学上进行猜测。您的if
语句可以忽略,因为它不会改变循环的流程。您的内部循环不依赖于外部循环,因此它们在给定的n
中运行(n-a)*(n-b)=n^2+…
次。我很抱歉。我以后不会使用该标记。我得到了O(n^2)
。您的if
语句可以忽略,因为它不会改变循环的流程。您的内部循环不依赖于外部循环,因此它们在给定的n
中运行(n-a)*(n-b)=n^2+…
次。我很抱歉。我以后不会用那个标签了。