【问题标题】:Complexity of a loop循环的复杂性
【发布时间】:2018-03-08 07:21:44
【问题描述】:

我刚刚开始学习数据结构,很高兴能得到一些帮助。 假设我有一个数字数组的选择排序函数的伪代码:

  1. 对于 i = n 从 1 到 1,执行
  2. maxPos = i
  3. 对于 j = i - 1 由 1 降为 1,这样做
  4. 如果 A[j] > A[maxPos]
  5. maxPos = j
  6. 交换 (A[maxPos], A[i]) 我想计算这个函数的步数。

就我目前所知: 第 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。但是无论如何都要用数学方式写出来吗?

第 6 步采取第 2 步的步数。

非常感谢您的帮助。

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

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

【问题讨论】:

  • 这个特定算法的复杂度将总是O(N^2),不仅仅是在最坏的情况下,因为没有任何代码行会导致循环过早中断或更改其条件。

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


【解决方案1】:

基本上你有:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2018-12-20
    • 2013-12-19
    • 1970-01-01
    相关资源
    最近更新 更多