如果2n^2 + n
的24个单位时间内可以解决复杂性问题n = 2
,那么n = 4
需要多长时间?
我被告知答案是48但我相信它应该是24 ^ 2,因为算法的复杂性是O(n^2)
。
感谢是否有人可以启发我。
答案 0 :(得分:2)
大O符号只是渐近符号。严格地说,f(n)= O(n ^ 2)意味着存在A,B实数和n0整数,使得对于n> 1,An ^ 2 <= f(n)<= Bn ^ 2。 = n0。
因此,首先如果n&lt; n0趋势甚至不必遵循n ^ 2 。其次,对于n> = n0,只能保证f(n)是有界的(如上所述)。如果你想近似,O(n ^ 2)意味着对于大n你可以删除低阶项,f(n) - &gt;但是,对于小n,这将引入显着的误差。
在你的情况下,你有完整的表演功能形式,f(n)= 2n ^ 2 + 2,所以你应该使用它!
假设每个步骤花费时间T0为恒定时间C,则T(n)= T0 *(2n ^ 2 + n)+ C. 如果C = 0 ,则:
答案 1 :(得分:2)
复杂度O(f(n))包括采用c * f(n)+ d时间量的所有计算,其中c和d是常数。如果d = 0则:
在n = 2并且复杂度O(2n ^ 2 + 2)为24:
的情况下24 =(2 * 2 ^ 2 + 2)* c,因此c = 24/10 = 2.4
现在我们计算n = 4:
(2 * 4 ^ 2 + 4)* 2.4 = 36 * 2.4 = 86.4单位时间
如果d不为0,则c =(24-d)/ 10,对于n = 4,则需要
36 *(24-d)/ 10 + d = 86.4 + 0.9d
因此,答案不可能是48,这另外意味着线性算法
答案 2 :(得分:1)
我当然认为不会是24^2
。由于您正在讨论O(n^2)
,并且您将获得一个示例,其中n = 2
需要24个单位的时间,因此对于n = 4,它将花费大约4倍的时间来完成({{ 1}}; 2^2 = 4
- 大约4次)。
如果您要以不同方式计算它,请将4^2 = 16
插入n = 2
,然后获得2*n^2 + n
。如果10
,则意味着每个周期需要2.4个单位的时间。然后,插入10 = 24
,您获得n = 4
并乘以2*4^2 + 4 = 36
即可获得2.4
答案 3 :(得分:0)
使用Ruby作为数学语言,OP的公式是
f = -> x { 2 * x ** 2 + x }
(1)假设算法的一步需要1个单位时间,答案为50
,因为常数项c
是
c = 24 - f.( 2 ) #=> 10
# and
c + f.( 4 ) #=> 50
根据这个假设,答案是50。
(2)但是,如果我们允许算法的一步采用e
个时间单位而不是1个时间单位,则常量c
将为:
24 - e * 10
n == 4
的运行时间为
24 + e * 26 # gives 50 for e == 1
(3)有一个额外的假设,即常数时间为零(即给定的公式完全),我们有
24 - e * 10 == 0
Candide,bcorso和Milky Dinescu的答案适用。
虽然OP问题并没有从字面上说明1步== 1时间单位,但我仍然认为这是作者的意图,也是基于50
的典型,易于检查的教科书结果。