计算大O交换,计算和比较

时间:2017-06-15 18:35:40

标签: algorithm loops time complexity-theory notation

查看以下代码:

Algorithm sort

Declare A(1 to n)

n = length(A)

for i = 1 to n
    for j = 1 to n-1 inclusive do
       if A[i-1] > A[i] then
          swap( A[i-1], A[i] )
       end if
  next j
next i

我会说:

  • 2个循环,n,n * n = n ^ 2(n-1截断为n)
  • 1比较,在j循环中,将执行n ^ 2次
  • 将执行n ^ 2次的交换
  • 还有2n个循环添加,执行n ^ 2次,所以2n ^ 2

标记方案中给出的答案:

算法评估

比较

唯一的比较出现在j循环中。 由于此循环将迭代总共n ^ 2 次,它会执行 完全是n ^ 2

数据交换

  • 可能在j循环中执行交换操作。
  • 交换(A [i-1],A [i])每个都会发生n ^ 2次。
  • 因此在j循环中执行2n ^ 2操作
  • i循环有一个加法运算递增i,发生n 次
  • 添加这些添加操作的数量是2n ^ 2 + Ñ
  • 当n变得非常大时,n ^ 2将占主导地位,因此它是O(n ^ 2)

注意:计算可能包括赋值操作,但这些不会影响总时间,因此忽略

标记概述:

  • 用于识别i循环的1个标记将执行n次。
  • 用于识别j循环的1个标记将执行2n ^ 2次这不是n * n = n ^ 2吗?对于i和j
  • 1标记正确的计算次数2n ^ 2 + n 为什么不这样做 + 2N吗
  • 1标记用于确定订单将由n ^ 2支配为n 得到非常大的算法
  • 给O(n ^ 2)

编辑:从标记方案中可以看出,我应该计算:

  • 循环数,但n-1可以截断为n
  • 比较,例如如果陈述
  • 数据交换(计为一个语句,即arr [i] = arr [i + 1],temp = arr [i]等被视为一次交换)
  • 计算
  • 空格 - 只是数组等n。

有人可以解释这些答案的来源吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

这是我对标记方案的看法,明确标记了他们正在计算的操作。看起来他们正在计算作业(但很方便地忘记了进行交换需要2或3个作业)。这就解释了为什么他们计算增量而不是[i-1]索引。

计算掉期

i loop runs n times
    j loop runs n-1 times (~n^2-n)
        swap (happens n^2 times)            n^2

计算添加项(+=

i loop runs n times 
    j loop runs n-1 times (~n^2)
        increment j (happens n^2 times)     n^2
    increment i (happens n times)           n

sum:                                        2n^2 + n