如果有2个函数的时间复杂度为O(2 / n)和O(100)。哪个功能的执行时间较短?是否存在时间复杂度为2 / n的实际函数? (在一些算法问题文件中找到了这个)
答案 0 :(得分:2)
首先,在O表示法(以及Theta和Omega)中,您可以忽略任何常量,因为the definition已经包含“对于某些常量 k ”的部分。
因此,基本上,O(100)相当于O(1),而O(2 / n)相当于O(1 / n)。哪个具有更快的执行时间 - 取决于 n 。如果我假设 100 和 2 / n 直接用于计算执行时间,则执行时间为:
现在,我希望这个问题纯粹是理论上的,因为实际上没有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)
的子集}?
是肯定的。让f(n)
成为O(2/n)
中的函数 - 这意味着存在常量c,N,以便每个n > N
:c*f(n) < 2/n
。还有常量c2,N2
,每个c*2/n < 1
n > N2
,min{c1,c2} * f(n) < 1
n > max{N1,N2}
。O(2/n)
。因此O(1)
是lim(2/n) = 0
没有。由于c,N
位于无穷大,对于每个n>N
,2/n < 1*c
f(n) = 2/n
因此O(1)
不在O(2/n)
,而它是O(2/n)
在O(1)
结论: O(2/n)
的函数也是O(100)
- 但不是相反。
这意味着 - O(1) = O(100)
中的每个函数都“缩小”然后为1。
(1)它与{{1}}相同,因为{{1}}