【问题标题】:How to find time complexity of an algorithm when given number of iterations and total time?当给定迭代次数和总时间时,如何找到算法的时间复杂度?
【发布时间】:2012-10-04 08:49:05
【问题描述】:

当我看到算法时,我知道如何计算算法的时间复杂度,但是当我得到次数时,我似乎无法弄清楚如何计算它算法被执行,所花费的时间。

我有时可以得到它,当它很明显时,比如 O(n)、O(n) 或 O(n^2),但以这个问题为例:

算法运行大小为 n 的给定输入。 如果 n 为 4096,则运行时间为 512 毫秒。 如果 n 为 16384,则运行时间为 1024 毫秒。 如果 n 为 36864,则运行时间为 1536 毫秒。

时间复杂度是多少?

我看到 n * 2, t * 1.5,但我不太确定如何计算出来。

感谢您的帮助:)

【问题讨论】:

  • 这一般是无法回答的。您的教授可能希望您将常见的时间复杂度之一拟合到给定的值,但就您所知,该算法可能是 O(1)。
  • 此外 - 一些算法有不同的情况。一个例子是 SAT Solvers,它通常非常快,但在最坏的情况下会衰减到指数运行时间(这对于 n 的大值来说是可怕的)

标签: performance algorithm time complexity-theory


【解决方案1】:

我想说,这类问题需要的不仅仅是三个数据点,因为系统的复杂性而不仅仅是算法。

我要做的是比较迭代和经过的时间,看看你是否能找到与标准时间复杂度之一匹配的模式:

  • 常数:O(c),其中 c 是常数。
  • 线性:O(n)
  • 多项式:O(n^c),其中 c 是一个常数(甚至是像 O(n^2 + n^6) 这样复杂的东西)
  • 指数:O(c^n) 其中 c 是一个常数。
  • 对数:O(log|n|)
  • 不管这叫什么:O(n log|n|)

让我们来解决你的问题:

n     | time
4096  | 512 ms
16384 | 1024 ms
36864 | 1536 ms

当 n 增加 4 倍(从 4096 到 16384)时,时间增加 2 倍(从 512 到 1024 毫秒)。

当 n 增加 9 倍(从 4096 到 36864)时,时间增加 3 倍(从 512 到 1536 毫秒)。

与此匹配的函数是 f(n) = n^(1/2)。当 n 上升 4 倍时,f(n) 上升 sqrt(4) 倍,等等......

所以这是 O(n^.5) 阶,是多项式

TLDR:绘制图表并将其与时间复杂度的常用函数相匹配。在现实世界中,您可能需要三个以上的数据点。

编辑:我想补充一点,这应该更复杂。每种时间复杂度都可能有一个常数项。 IE。 O(n^c) 更可能是 O(n^c + K),其中 K 是常数。写出来时,为了简单起见,我们忽略了常数,但它会显示在您的图表中。

【讨论】:

  • 太棒了,我现在明白了!谢谢大家的帮助:)
【解决方案2】:

如果算法的时间复杂度为n^x,则输入n_1n_2 的时间商t_2 / t_1

(t_2 / t_1) = (n_2 / n_1)^x

如果你取对数,你会得到

log (t_2 / t_1) = x * log (n_2 / n_1)

并且可以求解x

x = log (t_2 / t_1) / log (n_2 / n_1)

在您的示例中,使用 n_1 = 4096t_1 = 512ms,您会得到商

16384 / 4096 = 4        36864 / 4096 = 9
 1024 / 512  = 2         1536 / 512  = 3

所以x = 1/2.

如果复杂性不遵循纯幂律,您可以通过评估足够多的此类商来估计幂。如果复杂度实际上是指数(或超指数),则商将线性或超线性增长。然后可以使用增长率来找到指数情况下指数的基数。

【讨论】:

    【解决方案3】:

    如果您不确定实际的算法,那么您可以创建一个折线图,n 将位于图的底部,y 将是执行该数字所花费的时间。

    如果直线的斜率为0,则为O(1),如果为线性,则为O(n),如果为曲线,则为O(n^2),O(log n),或其他一些非线性时间复杂度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 2015-03-09
      • 2023-03-24
      • 2021-11-15
      • 2019-01-26
      • 2012-06-17
      • 1970-01-01
      相关资源
      最近更新 更多