【发布时间】:2017-11-28 04:41:55
【问题描述】:
我想知道一个算法的复杂度和一个问题的复杂度的区别,也就是这两件事有哪些不同的地方
【问题讨论】:
标签: time-complexity complexity-theory computation-theory space-complexity
我想知道一个算法的复杂度和一个问题的复杂度的区别,也就是这两件事有哪些不同的地方
【问题讨论】:
标签: time-complexity complexity-theory computation-theory space-complexity
好问题!大多数人不区分两者,这是一个很大的禁忌。
简单地说,算法的复杂度就是算法的运行时间。这可以用多种方式表示,大 O、大 Theta 或任何各种 Landau Notations。还有其他表示,但最常用的是大 O 表示法,可用于分析算法的最坏情况时间复杂度与输入大小的函数关系。
问题的复杂性通常是解决问题的任何算法的下限(wiki 是一个不错的资源)。例如,我们可以证明基于比较的排序具有n log n 的下限。这意味着,任何通过比较元素进行排序的算法,无论哪种算法,在最坏的情况下都将至少花费n log n 时间。使用朗道表示法,我们会说这个问题需要Omega(n log n)。
总之,问题复杂度是一个下限,而算法通常会建立一个上限。当您找到一个算法的上限与问题的下限匹配时,您就找到了一个渐近最优算法!
【讨论】: