使用统计方法确定程序的近似时间复杂度

问题描述 投票:2回答:2

这里是bubbleSort的输出值:

n = [10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000]
t = [9.368115451001358, 37.69119230900105, 85.12908719999905, 152.00092839799981, 242.2243322070026, 353.44638952199966, 487.97764714200093, 669.483528703, 873.3610439340009, 1091.256361742002]

我想测试所有常见的复杂度,例如N次方,对数等。我尝试将其拟合为多项式曲线,并使用kolmogorov-smirnov检验对其进行了测试,但未获得准确的答案。这可能是我的曲线拟合(numpy.polyfit)的问题。


我不需要代码(如果可以的话,可以的),但是想深入了解这个概念并找到解决问题的准确方法吗?


编辑:使用更多输入进行了测试,但是结果仍然不确定,并且与以前的结果完全相同

python algorithm statistics time-complexity curve-fitting
2个回答
1
投票

您的时序太短,无法期望有一个很好的近似值。几秒钟之内的所有事情很可能是恒定开销,一点点噪音和实际计算时间的一小部分的结果。


0
投票

我通过zunzun.com上的开放源代码Python网站的“函数查找器”运行数据,该函数使用“差分进化”遗传算法来提供用于拟合非线性方程的初始参数估计。我设置函数查找器以查找具有四个或更少参数的方程式。在刚刚测试的340多个方程中,最好的似乎是Pareto型方程“ y = 1.0-(1.0 / pow(1.0 + a * x,b))+偏移”,参数a = -1.9034226324834123EE-03 ,b = -1.1000895110345629E-02,且Offset = -1.1123894127275866E-03,得出RMSE = 0.0005793和R平方= 0.9961

© www.soinside.com 2019 - 2024. All rights reserved.