大O符号时间问题

时间:2010-11-22 18:23:03

标签: big-o

我们有3个带有大写符号的函数:

Func A: O(n)
Func B: O(n^2)
Func C: O(2^n)

如果这些函数在10秒内完成,那么需要为每个函数处理2 * n个进程需要多长时间?如果你解释为什么我会快乐。

谢谢

4 个答案:

答案 0 :(得分:18)

实际上,你实际上只能说一个数据点。举例来说,第一个的简单答案是“两倍长”,20秒,因为O(n)意味着时间复杂度与输入参数成正比地上升。

然而,这没有考虑到大O通常被简化为仅显示最高效果。实际花费的时间可能与n加上常数5成正比 - 换句话说,有一个恒定的5秒设置时间,完全不依赖于n,那么半秒在此之后每n

这意味着时间将是15秒,而不是20。并且,对于提到的其他情况,情况更糟,因为O(n 2 )实际上可能与n^2 + 52n + 7成比例,这意味着您将需要三个数据点,假设你甚至知道等式的所有组成部分。它甚至可能是一些可怕的东西,如:

                  1      12
n^2 + 52*n + 7 + --- + ------
                  n    47*n^5

技术上仍然是O(n 2 )。

如果他们简单方程式(可能是作业),那么你只需要将方程组合在一起,然后在任何有n的地方插入2n,然后用术语重新计算方程式原来的:

Complexity  Equation     Double N     Time Multiplier
----------  --------   -------------  ---------------
O(n)        t = n      t = 2n               2
O(n^2)      t = n^2    t = (2n)^2
                         = 4 * n^2          4
O(2^n)      t = 2^n    t = 2^(2n)
                         = 2^n * 2^n        2^n
                                            (i.e., depends on
                                                  original n)

那么,我给出的答案就是:

  • (A) 20秒;
  • (B) 40秒;和
  • (C) 10 x 2 n 秒。

答案 1 :(得分:2)

这是一个提示

Func A是您需要1个单位时间才能完成的基本指标。在这个问题中,您的时间单位是10秒。所以O(2*n) = 2*O(n) = 2 * Units = 2 * 10 sec = 20 sec

只需将2*n插入n^22^n功能即可获取

  O((2*n)^2) = O(2^2 * n^2) = O(4 * n^2)
  O(2^(2*n)) = O((2^2)^n)   = O(4^n)

现在只计算每个代表的时间单位数乘以10秒。

答案 2 :(得分:2)

A:2倍

B:4倍

C:2 ^ n倍

时间取决于现在

给定时间为10秒,n也为10,分别为20秒,40秒和1024秒:)

但如果n为1,则为20,40和40 ......

答案 3 :(得分:2)

编辑:C是10 * 2 ^ n,我在回答中犯了一个错误。我会把它留在下面,但这是错误的:

真正的公式包括我在原始答案中遗漏的处理率。处理率在前两个中消失,但在C中没有。

2^n/p=10 (where p is the processing rate of units/second)
2^n=10*p
y=2^(n*2)/p
y=(2^n)^2/p
y=(10*p)^2/p
y=100*p^2/p
y=100*p (so we need to know the processing rate. If we know n, then we know the processing rate)

单位在上面很好,因为我们有秒^ 2 /秒=秒。

原始答案

答:20 B:40 C:100 现有的答案已经解释了A和B.关于C等式,如果我的数学正确地为我服务......

第1部分:n等于什么

2^n=10
log(2^n)=log(10)
n*log(2)=log(10)
n=log(10)/log(2)

第2部分:现在用2 * n替换n

x = 2^(2*n) 
x = 2^(2*log(10)/log(2)) 
x = 100 (thanks excel: =2^(2*LOG(10)/LOG(2)))

我仍然没有在6年内使用logarithms,所以如果我错了,请原谅。

编辑:找到一种更简单的方法。

Given t is orginal time, and y is the new time.
t=2^n
y=2^(n*2)
y=(2^n)^2
y=t^2
y=10^2
y=100