对时间复杂性真的很困惑

时间:2015-04-01 00:23:52

标签: sorting time complexity-theory

我知道如何为每种算法计算bigO,一般来说,它是如何工作的。例如,在链表中查找特定数字将是O(N),因为您可能必须从头到尾遍历链表中的每个输入。但是,bigO在时间上究竟意味着什么呢?为什么合并排序比插入排序运行得更快,即使插入排序具有更快的时间复杂度"?请给我你的意见,以便我明白。非常感谢。

2 个答案:

答案 0 :(得分:0)

看一下这个例子:

假设您有两种算法A₁A₂。这样做,但第一个具有Θ(n)的复杂性,第二个具有Θ(n²)的复杂性。两种算法都有不同的运行时间。您无法从复杂性计算运行时间,因为它取决于确切的实现,运行的计算机,复杂性和其他方面无法看到的内容。但是你可以通过复杂性来预测运行时间的变化。 假设您将输入从长度n更改为长度2n,意味着您将输入长度加倍。然后,A₁的运行时间也应该(几乎)加倍,但A₂的运行时间应该是(2n)² = 4n²的4倍左右。

要解决插入排序与合并排序示例: 插入排序的复杂性为O(n²),合并排序的复杂性为O(n log n)。因此,合并排序比插入排序具有更好的复杂性,并且还应该运行得更快。也许(对于非常短的列表)插入排序比合并排序运行得更快,因为合并排序在big-o表示法中隐藏了更大的常量因子。

答案 1 :(得分:0)

您遇到的问题/问题在初学者级别非常普遍。我建议你阅读更多关于“渐近符号”的内容。(互联网上有很多有用的视频和网站都有相同的解释)渐近分析正在考虑应用于大型数据库时算法的性能。 渐近概念基本上有三种类型 -

  1. Big O
  2. Big Omega
  3. 西塔
  4. 当我们有一个渐近上界时使用Big O,即 当存在正常数c和n时,g(n)的大O等于f(n){O(g(n))= f(n)} 对于所有n> 0 = 0,0 <= f(n)&lt; = c g(n)。 (也就是说,您定义一个最大值,使得曲线f(n)始终位于该点上或下方。

    当我们有渐近下界

    时,会使用Big Omega

    当我们上限和下限时使用Theta。

    现在,回到你的问题 - 插入排序的复杂性为O(n²)和合并排序O(n log n)。大值(n²)倾向于具有比(n log n)更大的值。
    假设n = 100。
    在插入排序中,值将为10,000,并且对于合并排序,它将be(100 log 100)即100.2 - &gt; 200。

    因此,您可以看到合并排序的运行速度比插入排序快得多。