函数的大O符号是什么?

时间:2013-12-11 20:11:58

标签: python-3.x big-o performance

我知道大O表示法衡量一个函数的效率,但我真的不知道如何计算它。

def method(n)
   sum = 0
   for i in range(85)
       sum += i * n
   return sum

答案是否为O(f(85))?

4 个答案:

答案 0 :(得分:4)

此功能的复杂性为O(1)

RAM模型中的

基本数学函数在恒定时间内发生。该函数中的主要术语是

for i in range(85):

因为85是常数,所以复杂性由O(1)

表示

答案 1 :(得分:3)

你有4个“动作”的功能,计算它的大O我们需要为每个动作计算大O并选择max:

  1. sum = 0 - 恒定时间,测量O(1)
  2. for i in range(85) - 恒定时间,85次迭代,O(1 *复杂度为#3)
  3. sum + = i * n - 我们可以说恒定时间,但乘法实际上取决于i和n的位长,所以我们可以说O(1)或O(max(lenI,lenN))< / LI>
  4. 返回总和 - 恒定时间,测量O(1)
  5. 所以,只要lenI和lenN是常数(通常为32或64位),max(lenI,lenN) - &gt;,可能的最大O是#2,即1 * O(#3)。 32/64,因此您的函数的总复杂度为 O(1 * 1)= O(1)

    如果我们有很大的数学,即N的位长可以非常长,那么我们可以说 O(位长N)

    注意:位长N实际上是 log2(N)

答案 2 :(得分:1)

理论上,复杂度为O(log n)。随着n的增长,读取数字和执行乘法需要更长的时间。

然而,实际上,n的值受到约束(存在最大值),因此可以在O(1)时间内读取它并对其执行操作。由于我们以固定的次数重复O(1)运算,因此复杂度仍为O(1)。

注意O(1)表示恒定时间 - O(85)并不意味着任何不同。如果在序列中执行多个常量时间操作,则结果仍为O(1),除非序列的长度取决于输入的大小。执行O(1)操作1000次仍然是O(1),但执行nO(n)

如果你想真正安全地玩,只要说O(∞),这绝对是一个正确的答案。 CS老师在实践中往往不太欣赏它。

答案 3 :(得分:0)

在谈论复杂性时,总应该说什么操作应该被视为恒定时间(初始协议)。这里可以考虑整数乘法或不变。无论如何,该示例的时间复杂度优于O(n)。但这是老师对学生的伎俩 - 有点儿。 :)