【问题标题】:Given a time complexity, how do you calculate run time given an n?给定时间复杂度,如何计算给定 n 的运行时间?
【发布时间】:2015-05-28 02:33:19
【问题描述】:

给了我一个算法,估计时间复杂度 T(n) 为 3*n! + 2。

我知道n = 10时算法运行所需的时间是1秒,我想计算n = 20时的运行时间。

我对如何处理这个问题有点困惑。我假设从 n=10 开始我只是将它插入 T(n),得到 3*(10!) + 2,这显然不是 1(秒)。

任何人都可以就如何正确处理这个问题提供一些提示吗?谢谢!

【问题讨论】:

  • (3*10!+2)/k = 1(3*20!+2)/k = x。求解x。然后意识到这只是一个估计,唯一确定的方法就是测量。
  • @MarkRansom 感谢您的回复。我假设我应该在第一个方程中求解 k,然后将其代入方程 2 并求解 x?
  • 如果时间复杂度是O(3*n!),那么对于n = 20,需要数年才能完成。
  • @PhamTrung 是对的。 670,442,449,629 秒 - 大约是 21,259 年...
  • 谢谢大家的帮助!

标签: algorithm time runtime big-o time-complexity


【解决方案1】:

正如@MarkRansom 在 cmets 中所写,您必须解方程

Runtime(m) / T(m) = Runtime(n) / T(n)

Runtime(m)。在这种特殊情况下,结果是那么大(参见@shapiro.yaacov 的评论),不管这个值是否准确。

假设您的复杂度是 T(n) = 2n²,而您测量 n = 1000 的时间为 1 秒,这导致我们得到

Runtime(2000) = T(2000) ⋅ 1s / T(1000) = 4s

但这并不意味着您的算法可以在 4 秒内准确运行。如果您的输入大于特定类型的内存,情况可能会更糟。例如。也许n = 1000 的输入适合缓存。如果n = 2000 的输入没有,则必须将其存储在 RAM 中,因此您的运行时间会差 50 倍(只需输入一个数字,我不知道 RAM 与 L3 缓存相比要慢多少) . 如果您有一个不适合 RAM 并且必须存储在硬盘上的巨大输入,情况会变得更糟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多