Time complexity 运行时间计算/算法的复杂性

Time 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)

我必须计算算法的时间复杂度或理论运行时间(给定伪代码),逐行计算为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)
        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+…
次。我很抱歉。我以后不会用那个标签了。