我们有3个带有大写符号的函数:
Func A: O(n)
Func B: O(n^2)
Func C: O(2^n)
如果这些函数在10秒内完成,那么需要为每个函数处理2 * n个进程需要多长时间?如果你解释为什么我会快乐。
谢谢
答案 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^2
和2^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