【发布时间】:2011-04-23 18:01:58
【问题描述】:
在回复this question 时,cmets 开始就 QuickSort 的复杂性展开辩论。我在大学时记得的是,QuickSort 在最坏的情况下是O(n^2),在一般情况下是O(n log(n)),在最好的情况下是O(n log(n))(但有更严格的限制)。
我需要的是对 average complexity 含义的正确数学解释,以便向相信大 O 符号只能用于最坏情况的人清楚地解释它的含义。
我记得如果要定义平均复杂度,您应该考虑所有可能输入的算法复杂度,计算有多少退化和正常情况。如果当 n 变大时,退化案例的数量除以 n 趋于 0,那么您可以说正常案例的整体函数的平均复杂度。
这个定义正确还是平均复杂度的定义不同?如果它是正确的,有人可以比我更严格地陈述它吗?
【问题讨论】:
-
关于这个论点,我认为如果你给出运行时间的大 O 符号并且没有限定它,那么你应该谈论最坏的情况,仅仅因为你说的是那个时间由具有指定大 O 的函数限制。如果时间是有界的,这意味着最坏情况下的时间是有界的,根据“有界”的定义。但是,如果您说“这是 O(n log n) 平均情况”,那么这是定义明确的,并且意味着您在这个问题中所说的内容。
-
这个问题可能值得尝试cstheory.stackexchange.com
-
@Chris:虽然该网站的常见问题解答中说“教科书中的典型家庭作业问题”太基础了,但我认为这和那一样基础。
-
你会在那里得到一页数学符号,对初学者不友好
-
@Chris S:我是一名程序员,但我以前做过一些数学运算,所以这对我来说不是问题。但对其他人来说,拥有更易于访问的东西确实很好。
标签: algorithm complexity-theory big-o