复杂性0表示法

时间:2017-01-14 16:00:41

标签: python time-complexity big-o

我对这个问题感到有些困惑,并希望得到一些指导:

  

当N为10000时,O(n2)函数运行大约需要1秒。

     

当N为30000时需要多长时间?

我认为它要么是1秒还是3秒,因为它是它的三倍,但我不确定我的逻辑是否正确。

谢谢。

2 个答案:

答案 0 :(得分:1)

来自Wikipedia

  

在计算机科学中,算法的时间复杂度量化了算法作为表示输入的字符串长度的函数运行所花费的时间量。

这样,如果复杂度为O(n^2)且输入值为3倍,则工作时间会增加3^2 = 9倍。工作时间为9秒。

答案 1 :(得分:0)

这个问题有很多问题。

第一个问题:时间复杂度通常不会以秒为单位测量时间。例如,排序算法的时间复杂度可能指的是比较(或交换)的数量,并且哈希表查找的时间复杂度也可能指的是执行的比较的数量。实际运行时间是否与这些测量值成比例是值得商榷的。

第二个问题:big-O的定义是这样的:

  

f(n)= O(g(n))如果存在N和k使得n> 0。 N表示f(n)< K * G(N)。

这是一个问题,因为即使在这种情况下运行时间是以秒为单位测量的,将定义应用于O(n ^ 2)只表示对于足够大的n,该函数的上限是n ^ 2的某个倍数。

因此无法保证10000和30000足够大以足以获得“足够大”的资格,即使它们是,也无法从单个数据点开始估算k。即使有了这个估计,你也只能得到一个上限。

这个问题可能要问的是:

  

假设一个函数在时间上大约与n ^ 2成比例。当n = 10000时,需要1秒。当n = 30000时,需要花费多长时间?

然后,人们可以解决方程式:

1 sec ~= k * 10000^2
answer ~= k * 30000^2
        = 3^2 * k * 10000^2
        ~= 3^2 * 1 sec
        = 9 sec