Performance 如何根据多个步骤确定算法的时间复杂度

Performance 如何根据多个步骤确定算法的时间复杂度,performance,time,time-complexity,big-o,Performance,Time,Time Complexity,Big O,对于输入大小n和步骤数之间的关系为: 输入大小|步数 ------------------- 4 | 29 6 | 175 8 | 649 10 | 1835 12 | 4334 14 | 9063 16 | 16976 18 | 29842 它似乎从小于n**3开始,然后增长到小于n**4并且似乎不是指数型的,不是吗;DR:这是不可能精确知道的,因为有无限多看似

对于输入大小
n
和步骤数之间的关系为:

输入大小|步数
-------------------
4        |    29
6        |   175
8        |   649
10        |  1835
12        |  4334
14        |  9063
16        | 16976
18        | 29842

它似乎从小于
n**3
开始,然后增长到小于
n**4
并且似乎不是指数型的,不是吗;DR:这是不可能精确知道的,因为有无限多看似合理的解决方案


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

以下是原始结果(R2是一个描述回归质量的指标——R2=1意味着它接近完美):

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


如果你想确定一个算法的复杂性,你需要分析代码,而不是它的黑盒行为。

没有给出算法吗?我想你只需要找到一个函数,它能拟合曲线,R^2尽可能接近1。就单个术语而言,
O(x**4.5797)
似乎非常合适,但我不确定这是否是您要寻找的答案。任何东西都有帮助。多谢各位。我对Big O还是个新手。随着输入的大小,系统似乎变得“相对”更好。我还没有把它编码出来。为了完整性,它也绝对不是指数型的,这使得9.5395 e^(0.4774*x)的R^2为0.9614,谢谢你的回答。所以你会说它是某种多项式运行时算法,对吗?谢谢你的补码计算@ArchieGillis可能是的(如果没有算法伪代码,或者至少没有更多信息,我们无法确定)。
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