比较O(2 / n)和O(1)的时间复杂度

时间:2012-10-08 08:37:29

标签: algorithm time-complexity

如果有2个函数的时间复杂度为O(2 / n)和O(100)。哪个功能的执行时间较短?是否存在时间复杂度为2 / n的实际函数? (在一些算法问题文件中找到了这个)

4 个答案:

答案 0 :(得分:2)

首先,在O表示法(以及Theta和Omega)中,您可以忽略任何常量,因为the definition已经包含“对于某些常量 k ”的部分。

因此,基本上,O(100)相当于O(1),而O(2 / n)相当于O(1 / n)。哪个具有更快的执行时间 - 取决于 n 。如果我假设 100 2 / n 直接用于计算执行时间,则执行时间为:

    所有情况下 O(100)
  • 100 (时间单位)
  • 超过 100 (时间单位) O(2 / n) n< 0.02
  • 小于 100 (时间单位) O(2 / n) n> = 0.02

现在,我希望这个问题纯粹是理论上的,因为实际上没有O(1 / n)复杂度的算法 - 这意味着它需要更少的时间(那是注意时间)每个数据量,这只是时间)它需要处理的数据越多。我希望这很清楚,没有算法可以将 0 时间用于无限量的数据。

另一个复杂性,O(100)是一种算法,无论输入数据是什么,都采用相同的步骤,因此始终具有恒定的执行时间(实际上,它只需要由常量限制,它可以有时运行得更快)。一个示例是从整数文件中读取输入的程序,然后返回该文件中前100个数字的总和或者如果不存在100个数字则返回所有数字的总和。因为它总是最多读取100个数字(其余部分可以忽略)并对它们求和,所以它由一定数量的步骤限制。

答案 1 :(得分:1)

当然它取决于N的值.O(100)基本上是固定时间,并且可能比O(2 / N)更快或更慢,这取决于n是什么。

我无法想到一个O(2 / N)算法,随着数据的增加会变得更快......听起来有点奇怪。

答案 2 :(得分:1)

执行任何操作的O(2/n)算法几乎是不可能的。

算法是产生结果的有限步骤序列。由于计算机上的“步骤”需要一定的时间(例如至少一个CPU周期),因此算法可以具有O(2/n)时间的唯一方法是,如果它需要时间足够大n。因此它什么也没做。

不考虑算法和时间复杂度:O(2/n)函数是“小于”常数,因为O(2/n)函数必然倾向于0,因为n倾向于无穷大,而{{1}函数不一定那样做。

对本文中问题文本的评论:O(1)的任何函数也是O(100)O(1)的任何函数也是O(2/n)。在那里用不必要的常量编写big-O并没有多大意义,但是因为它是一个考试,也许它可能会让你感到困惑。

答案 3 :(得分:1)

我不熟悉任何运行O(2/n)运算时间的算法,我怀疑它可以存在,但让我们来看看数学上的问题。

数学问题应该是:(1)O(2/n)O(1) 1 的子集(2)O(1)O(2/n)的子集}?

  1. 是肯定的。让f(n)成为O(2/n)中的函数 - 这意味着存在常量c,N,以便每个n > Nc*f(n) < 2/n。还有常量c2,N2,每个c*2/n < 1 n > N2min{c1,c2} * f(n) < 1 n > max{N1,N2}O(2/n)。因此O(1)lim(2/n) = 0

  2. 的子集
  3. 没有。由于c,N位于无穷大,对于每个n>N2/n < 1*c f(n) = 2/n因此O(1)不在O(2/n),而它是O(2/n)O(1)

  4. 结论: O(2/n)的函数也是O(100) - 但不是相反。
    这意味着 - O(1) = O(100)中的每个函数都“缩小”然后为1。


    (1)它与{{1}}相同,因为{{1}}