【问题标题】:How to find the time complexity of an algorithm based on a number of steps如何根据多个步骤找到算法的时间复杂度
【发布时间】:2021-06-27 13:39:44
【问题描述】:

程序的“Big O”时间复杂度是多少,其中输入大小n 与步数之间的关系为:

input size | steps
-------------------
  4        |    29
  6        |   175
  8        |   649
 10        |  1835
 12        |  4334
 14        |  9063
 16        | 16976
 18        | 29842

它似乎从小于n**3 开始,然后增长到小于n**4 并且似乎不是指数级的,不是吗?

【问题讨论】:

  • 没有给出算法?我认为您只需要找到一个与 R^2 尽可能接近 1 的曲线拟合的函数。对于单个术语,O(x**4.5797) 似乎非常适合,但我不确定这是否是您正在寻找的答案。
  • 任何东西都有帮助。谢谢。我还是 Big O 的新手。系统似乎在输入大小方面变得“相对”更好。我还没有把它编码出来。

标签: performance time time-complexity big-o


【解决方案1】:

TL;DR:这是不可能准确知道的,因为有无限数量的似是而非的解决方案。


您可以使用多项式回归来猜测复杂程度假设它是多项式并且算法的行为是一致(即,该算法不包含任何影响步数的条件结构。

以下是原始结果(R2 是描述回归质量的指标 - 其中 R2=1 表示接近完美):

If the degree is 1:
    Function = y(x) = 1,748.905x^1 + -11,850.452
    R2 = 0.81
    Mean Squared Errors: 15062257.81
    Root Mean Squared Errors: 3881.012

If the degree is 2:
    Function = y(x) = 207.807x^2 + -2,822.839x^1 + 8,930.202
    R2 = 0.993
    Mean Squared Errors: 552581.235
    Root Mean Squared Errors: 743.358

If the degree is 3:
    Function = y(x) = 9.997x^3 + -122.089x^2 + 436.132x^1 + -306.881
    R2 = 0.999
    Mean Squared Errors: 77681.188
    Root Mean Squared Errors: 278.713

If the degree is 4:
    Function = y(x) = -0.835x^4 + 46.721x^3 + -685.349x^2 + 3,940.647x^1 + -7,609.702
    R2 = 1
    Mean Squared Errors: 37326.804
    Root Mean Squared Errors: 193.201

If the degree is 5:
    Function = y(x) = -0.239x^5 + 12.293x^4 + -226.968x^3 + 1,992.662x^2 + -8,223.310x^1 + 12,674.167
    R2 = 1
    Mean Squared Errors: 4825.15
    Root Mean Squared Errors: 69.463

基于此,您可以肯定地说复杂度不是线性的,也不是二次的。对于其他学位,不可能说哪个是“正确”的。原因是 1. 没有足够的度量来区分可能的解决方案,以及 2.任何数学函数都可以使用任意高次多项式函数来逼近(有关近似理论的更多信息,请参阅here

如果您想确定算法的复杂性您需要分析代码而不是其黑盒行为。

【讨论】:

  • 为了完整性,它也绝对不是指数的,这使得9.5395 e^(0.4774 * x) 的 R^2 为 0.9614
  • 感谢您的回答。所以你会说它是某种多项式运行时算法,对吗?
  • 感谢 Calculuswhiz 的补充。 @ArchieGillis 是的,可能(没有算法伪代码,或者至少没有更多信息,我们无法确定)。
猜你喜欢
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
相关资源
最近更新 更多