我正在攻读计算机科学学位,在课堂上我们使用的是大写符号,而不是大写符号。虽然在阅读有关算法及其运行时间的文章时,我几乎没有找到任何地方的大写符号。为什么在大多数书籍和文章中,用于表示算法运行时间的最差情况,为什么不使用theta表示法?
答案 0 :(得分:2)
Big-O是一个上限。
Big-Theta是一个紧密的界限,即上限和下限。
当人们只担心可能发生的最坏情况时,大O就足够了;即它说“它不会比这更糟糕”。当然,越严格的界限越好,但计算[1]并不总是很容易。
以下意见[2]将为您提供更好的理解:
正如人们所说,大The是一个双面的界限。严格地说,当你想要解释算法可以做得多好,并且该算法不能做得更好或没有算法可以做得更好时,你应该使用它。例如,如果您说“排序需要Θ(n(log n))比较最坏情况输入”,那么您将解释有一种排序算法使用O(n(log n))比较任何输入;对于每个排序算法,有一个输入强制它进行Ω(n(log n))比较。
现在,人们使用O代替Ω的一个狭窄原因是放弃关于最差或平均情况的免责声明。如果你说“排序需要O(n(log n))比较”,那么对于有利的输入,该陈述仍然适用。另一个狭窄的原因是,即使一个算法做X需要时间Θ(f(n)),另一个算法可能会做得更好,所以你只能说X本身的复杂性是O(f(n))。
然而,有一个更广泛的理由是人们非正式地使用O.在人的层面上,当反向方面从背景“明显”时,总是做出双面陈述是一种痛苦。因为我是一名数学家,所以我总是小心翼翼地说:“如果下雨,我会带伞”或“我可以玩4球而不是5”,而不是“我会带伞,如果它下雨“或”我可以玩弄4球“。但是这些陈述的另外一半通常显然是有意或无意的。关于显而易见的事情,只是人性。分裂头发令人困惑。
不幸的是,在数学或算法理论这样严格的领域,它也令人困惑,不会分裂头发。当他们应该说Ω或Θ时,人们将不可避免地说O.跳过细节,因为它们“显而易见”总是会导致误解。没有解决方案。