【发布时间】:2018-03-08 07:21:44
【问题描述】:
我刚刚开始学习数据结构,很高兴能得到一些帮助。 假设我有一个数字数组的选择排序函数的伪代码:
- 对于 i = n 从 1 到 1,执行
- maxPos = i
- 对于 j = i - 1 由 1 降为 1,这样做
- 如果 A[j] > A[maxPos]
- maxPos = j
- 交换 (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