我知道如何为每种算法计算bigO,一般来说,它是如何工作的。例如,在链表中查找特定数字将是O(N),因为您可能必须从头到尾遍历链表中的每个输入。但是,bigO在时间上究竟意味着什么呢?为什么合并排序比插入排序运行得更快,即使插入排序具有更快的时间复杂度"?请给我你的意见,以便我明白。非常感谢。
答案 0 :(得分:0)
看一下这个例子:
假设您有两种算法A₁
和A₂
。这样做,但第一个具有Θ(n)
的复杂性,第二个具有Θ(n²)
的复杂性。两种算法都有不同的运行时间。您无法从复杂性计算运行时间,因为它取决于确切的实现,运行的计算机,复杂性和其他方面无法看到的内容。但是你可以通过复杂性来预测运行时间的变化。
假设您将输入从长度n
更改为长度2n
,意味着您将输入长度加倍。然后,A₁
的运行时间也应该(几乎)加倍,但A₂
的运行时间应该是(2n)² = 4n²
的4倍左右。
要解决插入排序与合并排序示例:
插入排序的复杂性为O(n²)
,合并排序的复杂性为O(n log n)
。因此,合并排序比插入排序具有更好的复杂性,并且还应该运行得更快。也许(对于非常短的列表)插入排序比合并排序运行得更快,因为合并排序在big-o表示法中隐藏了更大的常量因子。
答案 1 :(得分:0)
您遇到的问题/问题在初学者级别非常普遍。我建议你阅读更多关于“渐近符号”的内容。(互联网上有很多有用的视频和网站都有相同的解释)渐近分析正在考虑应用于大型数据库时算法的性能。 渐近概念基本上有三种类型 -
当我们有一个渐近上界时使用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。
因此,您可以看到合并排序的运行速度比插入排序快得多。