维基百科写道,在最坏的情况下,插入排序复杂度为 O(n2)(平方)。给出了最坏的情况 - 一个降序排列的数组:321,我们需要升序排列的 123。如果我们只考虑排列,我们得到:
321
2 вынул
3 сдвинул
2 вставил
231
1 вынул
3 сдвинул
2 сдвинул
1 вставил
我们得到了 123。但只发生了 7 个动作,应该有 9 个(3 平方)。似乎还有更多的比较。让我们添加比较:
321
сравнить 2 и 3, 2 меньше - двигаем
2 вынул
3 сдвинул
2 вставил
231
сравнить 2 и 3, 2 меньше - ок не двигаем
сравнить 2 и 1, 1 меньше - двигаем
1 вынул
3 сдвинул
2 сдвинул
1 вставил
已经有 10 个动作,那么复杂度是 O(n2 + 1)。我想错了吗?维基百科错误?或者如何正确计算 9 是多少?
O-符号表示依赖的形式——线性、二次、指数,哪一种会出来。而 + - 电车站对她完全无动于衷 - 从它们作用于线性函数的事实来看N,结果不会改变。粗略地说,O-notation 表示图形在“对象数”-“操作数”轴上在纸上的外观。从这个图被移动(添加到
N任何东西)、拉伸(乘以N一个常数)这一事实来看,它的形状不会改变。形式上,O-notation 给出了一个渐近上界,即 对于给定函数
g(n),符号O(g(n))表示函数集O(g(n)) = { f(n):有正常数 c 和 n 0使得
0<= f(n) <= cg(n) 对于所有 n >= n 0 }
有关 O、Ω 和 Θ 表示法的更多信息,请参阅Kormen、Leizerson、Rivest、Stein “算法。构造和分析”