循环的复杂性

时间:2018-03-08 07:21:45

标签: data-structures time-complexity complexity-theory asymptotic-complexity code-complexity

我刚刚开始学习数据结构,我很乐意提供一些帮助。 假设我有一个用于A数组的选择排序函数的伪代码:

  1. for i = n downto 1 by 1,do
  2. maxPos = i
  3. 对于j = i - 1 downto 1乘1,执行
  4. 如果A [j]> A [maxPos]
  5. maxPos = j
  6. swap(A [maxPos],A [i]) 我想计算这个函数的步数。
  7. 到目前为止我所知道的: 句子#1运行n次(如果你计算i--那么在这个句子中采取的步数是2n)

    句子#2运行n - 1次。

    现在对于第3号句子而言,我开始感到困惑: no.3从我所理解的运行$$ \ sum_ {i = 1} ^(n-1)i $$

    第4句运行与3号中相同的步数仅减去1.这意味着:$$ \ sum_ {i = 1} ^(n-1)i -1 $$

    第5句我不知道如何计算。我的意思是 - 对于最坏的情况,它应该是第4号,并且最好的情况下它应该是0.但是无论如何在任何情况下以数学方式编写它?

    no.6采取第2步的步骤。

    我非常感谢你的帮助。 < 3

    P.s - 我知道Big O作弊表,我知道这个函数的最坏情况是O($$ n ^ 2 $$)

    P.s no.2 - 如果有人知道为什么mathjax在这里不起作用我会很高兴知道我可以在这里使用哪些替代品。

1 个答案:

答案 0 :(得分:0)

你有,基本上:

for i = n downto 1
    for j = i-1 downto 1

外循环运行n次。内循环在第一次迭代中运行(n-1)次,对于第二次迭代运行(n-2)次,等等。因此内循环的迭代次数为:

(n-1)+(n-2)+(n-3)...(n-n)

这基本上是sum of numbers from 1 to n-1,使得渐近复杂度为O(n ^ 2)。

另见Selection sort:Complexity