假设已知算法为O(N 2 )并且解决大小为M的问题需要5分钟。关于解决4M大小问题需要多长时间?
是否像......一样简单。
M = 5分钟 4M = 20分钟
?
答案 0 :(得分:5)
由于Big O
只是一个近似值,你不能计算实时,但是你可以估算一下。在你的情况下,它将是
1 M ~ 5 min
4 M ~ 5 *(4*4) min ~ 80 min.
注意:我使用符号~
来显示近似值。
O(N ^ 2)=>大小为N的问题大约需要N ^ 2次
M大约需要M ^ 2次
O(M)~ O(1M)
=> 1^2*M^2
=> M^2
=> 5 min
O(4M) ~ (4M)^2
=> 4^2*M^2
=> 16*M^2
=> 16*5
=> 80 min
答案 1 :(得分:1)
如果复杂度为O(N ^ 2),这意味着对于某些固定但未知的k值,大小为N的问题的时间大约为k * N ^ 2.
如果您将大小为N的问题运算算法的大致时间表示为T(N),那么在数学上你有这个:
T(N) = k*N^2
T(M) = k*M^2
T(M) = 5 minutes
T(4*M) = k*(4*M)^2
= 16*k*M^2
= 16*T(M)
= 80 minutes
答案 2 :(得分:1)
简而言之,并非必要。
当我们说问题的时间复杂度为O(N 2 )时,这意味着给定大小 N 的问题,时间运行符合大致形式 a + bN + cN 2 的形式,其中a,b和c是未知系数。
这确实意味着最终 N 2 术语将主导运行时。但最终可能需要很长时间。可能会有一个很大的常量设置时间内置(也就是说,上面的公式中的 a 很大),这样你的假设场景的5分钟中有4个不会随着时间而变化问题的大小。在这种情况下,大小为4M的问题可能需要不到两倍的时间才能运行。
这些行的情况可能经常发生在涉及散列的算法(例如一些关联数组实现)中,特别是在使用诸如SHA2的慢散列函数时。这就是为什么搜索简单数组的小元素集合以查看它是否包含元素可能比搜索哈希表更快,即使搜索数组是O(N)并且搜索哈希集是O(1)。< / p>
答案 3 :(得分:0)
是的,这很简单,但你的计算错了。
您计算的是线性增长,例如O(n)生长的东西,例如如果某些输入需要五分钟,您的输入大小加倍,那么时间花费是该时间的两倍。您声明您的算法在O(n ^ 2)中运行,这是指数增长。
所以你的计算结果如下:
M^2 = 5 minutes <=>
M = sqrt(5) = 2.23607 (approx)
所以
(4M)^2 = (4*2.23607)^2 = 80 minutes
这是指数增长。
这也是您从未谈论计算机科学中特定运行时间的原因。无论是5分钟还是5个小时,都不是很有趣。有趣的是 当我们改变输入的大小 时会发生什么。因为当我们实现算法时,我们想要一些运行得更快的东西, 无论用什么计算机进行测试 ,当输入的大小朝 无限<时/ EM> 强>