当n的值变得非常小时,Big-O?

时间:2009-05-08 23:31:46

标签: big-o

我错过了引入big-O的课程,认为这是非常直接的。然而,当n变得非常小时,老师似乎仍然会说O(n)偏离函数?我无法在书中的任何地方找到这个。有人可以开导我吗?我们对O(n)的探索一直是在排序算法的背景下,如果它具有任何意义。

由于 基因

编辑: 感谢帮助人员,它一直很有启发性。我有一个后续问题。是否有一种相对简单的数学方法可以找出n对于O(n)来说太小的点?

  

相关问题

     
    

are there any O(1/n) algorithms?
    What is the difference between Θ(n) and O(n)?

  

7 个答案:

答案 0 :(得分:22)

Big O没有描述函数的执行时间,只是增长。所有函数都有一些需要加入的常数因子或开销。当n很低时,这种开销会使算法的任何改进相形见绌 - 一种算法需要每次操作50ms但是O(n)对小n的性能会更差而不是每个操作需要5毫秒但是有O(n * n)的算法。

这就是为什么一般来说,对于小套装来说,大O并不重要。对于大多数具有简单比较的对象,对10个项目的快速排序不会明显快于冒泡排序,对100个项目的线性搜索可能比二叉树更快,依此类推。

答案 1 :(得分:11)

Big-O表示法背后的概念是算法的渐近性能。随着N越来越大,Big-O表示法中的术语占据了总时间的主导地位。例如,在O(N ^ 2)算法中,总时间T(N)可能是:

T(N) = a * N * N + b * N + c

随着N越来越大,无论b或c的值如何,N ^ 2中的术语都占主导地位。

当N很小时,b和c术语很重要。

例如,如果a = 0.001,b = 1,000,c = 1,000,000。

 N                ~ T(N) [1 significant figure]
 1                1,000,000                (almost all c)
 1,000            2,000,000                (50:50 split on b and c)
 1,000,000        2,000,000,000            (50:50 split on a and b)
 1,000,000,000    1,000,000,000,000,000    (almost all a)

所以,如果你忽略了低阶条款,那么低N的表现就会被完全歪曲。在高N时,低阶项并不重要。

答案 2 :(得分:7)

课程材料越来越难以理解,因为参加讲座的次数(N)变得非常小。

答案 3 :(得分:2)

以下是“当n变得很小时,O(n)偏离函数”的例子:

考虑一个需要例如时间“50次n加n平方”的操作。

当n很大时,“n平方”项将占主导地位,因此操作可以说是“O(n平方)”。

当n很小时,“n平方”项可以忽略不计,“50倍n”项将占主导地位,因此当(并且只有)n很小时,它可以说是O (n)的

答案 4 :(得分:1)

为了扩展上面的答案,Big-Oh表示法测量函数的最终增长或其限制行为。

f = O(g)如果且仅存在N和常数c(可以是函数) N),对于所有n> N,
f(n)< = c * g(n)

假设f = 10000000 * n且g = n ^ 2.

f = O(g),但是如果你看n的值太小,比如说小于10000000 并设置c = 1, 你会看到g(n)< = f(n)。


要添加一个更极端的例子,你宁愿用一个算法来处理 复杂度n ^ 100000或复杂度为2 ^(。0000000001n)的算法。对于 合理的问题规模,后者更好。是什么让很多CS 如此美丽,它允许这种类型的滥用,然而,最自然 算法没有利用它。大多数多项式时间算法都有 小常数(至少在做了一点工作之后)。

祝你好运!

答案 5 :(得分:0)

一个很大的话题,但为了完整起见,我想提一些与Big_o符号相关的其他符号,这些符号通常用于理论计算机科学,你可能会在计算机科学文献中找到它们:Big-Θ符号,大Ω符号和小符号。这些只是增长率的其他(和更严格)描述。小o符号很容易被误认为是大O符号。

little-o也是两个函数f(x)和g(x)之间的关系。说'f(x)是g(x)的小-o'意味着f(x)比g(x)生长得快得多。在更多数学上说,当x接近无穷大时,f(x)/ g(x)的极限为零。

如前面的答案所述,big-O表示法用于描述算法增长率的上限。它实际上是两个函数f(x)和g(x)之间的关系,其中f(x)= O(g(x)),因为x变为无穷大。

请参阅Big-o wikipedia page,了解不同符号的简洁明了。

答案 6 :(得分:0)

根据定义:
f(n)= Θ(g(n))表示所有函数f(n) 集合,因此需要常量 c1 c2 也是n0 ,其中所有这些情况都是 true

  • c1。 g(n)是非负项或0。
  • c1。 g(n)< = f(n) [g(n)需要是某些n的下限]
  • f(n)< = c2。 g(n) [g(n)也需要是上界,因为我们定义Θ]。
  • 所有 n大于我们选择的n0

所以我们需要做的就是选择使所有条件为真的c1,c2和n0。因此,对于c1 c2的某些组合,如果选择n< n0,你不能保证你的约束作品。我认为这就是你的老师所说的“偏差”。