从"算法解锁" - Cormen,在第3章排序和搜索算法中,在"选择排序"。
运行时间是Omega(n ^ 2)。通过考虑外环的n / 2次迭代来计算该下限。为什么要考虑n / 2次迭代?
在所有情况下都没有遍历整个数组,包括下限情况?如果是的话,不应该' n' n'被认为是代替n / 2?
Edit1:即使是内循环也认为n / 2无助于理解逻辑。
答案 0 :(得分:3)
逻辑如下:外循环的不同迭代具有不同长度的内循环。在外环的前n / 2次迭代中,我们知道内环具有长度> = n / 2。因此,我们知道总工作量大于前n / 2次迭代的工作量,大于(n / 2)*(n / 2)= n ^ 2/4,因此Omega(n ^ 2)。
如果我们考虑整个外部循环,我们将无法声明内部循环有很多工作要做,因为外部循环的最后一次迭代具有长度为1的内部循环,我们将得到估计n * 1。 / p>
为了更好地理解,你应该记住以下两点:
Omega(n ^ 2)的定义。它没有说复杂性是> = n ^ 2。它说有常数C,因此复杂度> = C * n ^ 2。 C可以等于1,然后> = n ^ 2,或100,然后> = 100 * n ^ 2,或0.000001,然后> = 0.000001 * n ^ 2。但是因为我们发现对于选择排序我们有> =(1/4)* n ^ 2,我们知道选择排序是Omega(n ^ 2),C等于0.25。
在分析选择排序的复杂性时,我们不讨论"最坏情况"或者"最好的情况"场景。实际上,该算法不依赖于我们正在排序的数据,并且它总是在外循环和内循环中执行完全相同的迭代。 (确切地说:唯一的区别,取决于数据,是我们是否执行交换操作。但我们不计算分析中的交换操作。)因此,当我们谈论"首先n / 2次迭代"在外循环中,我们不假设算法能够在n / 2次迭代中完成工作。我们只是评估在前n / 2次迭代中完成的工作量,将剩下的迭代中的工作留在一边。