【问题标题】:Complexity of algorithms and complexity of problems. What are the differences?算法的复杂性和问题的复杂性。有什么区别?
【发布时间】:2017-11-28 04:41:55
【问题描述】:

我想知道一个算法的复杂度一个问题的复杂度的区别,也就是这两件事有哪些不同的地方

【问题讨论】:

    标签: time-complexity complexity-theory computation-theory space-complexity


    【解决方案1】:

    好问题!大多数人不区分两者,这是一个很大的禁忌。

    简单地说,算法的复杂度就是算法的运行时间。这可以用多种方式表示,大 O、大 Theta 或任何各种 Landau Notations。还有其他表示,但最常用的是大 O 表示法,可用于分析算法的最坏情况时间复杂度与输入大小的函数关系。

    问题的复杂性通常是解决问题的任何算法的下限(wiki 是一个不错的资源)。例如,我们可以证明基于比较的排序具有n log n 的下限。这意味着,任何通过比较元素进行排序的算法,无论哪种算法,在最坏的情况下都将至少花费n log n 时间。使用朗道表示法,我们会说这个问题需要Omega(n log n)

    总之,问题复杂度是一个下限,而算法通常会建立一个上限。当您找到一个算法的上限与问题的下限匹配时,您就找到了一个渐近最优算法!

    【讨论】:

    • “大 O 表示法”“表示随着输入大小向无穷大增长时算法的最坏情况时间复杂度”是不正确的;相反,big-O 表示法表示函数的渐近上界。它的一个非常常见的应用是将算法的最坏情况时间复杂度作为输入大小的函数,但相同的表示法可用于平均情况时间复杂度、最坏情况空间复杂度等,而其他朗道表示法可以同样可用于任何这些。
    • @ruakh,公平点。我已将其更新为 big-O 的应用程序,而不是确切的含义等。感谢您指出这一点。
    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 2012-10-29
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多