【发布时间】:2019-03-22 00:12:30
【问题描述】:
我正在尝试根据经验计算出我编写的算法的复杂性。我在输入中有两个变量:数据集大小(矩阵的维度)和计算的值的数量。
当我看到改变值数量的复杂性时,它是线性的。
当我看到改变集合大小的复杂性时,它是多项式的。
我想估计复杂度系数。所以, 让 T 为时间,v 值的数量和 s 大小,
显然,时间与 v 的截距和斜率随着 s 的增加而增加 所以我将它建模为
T(v; 修正 s) = (a + b*v)*s
对于尺寸来说,它似乎是合理的
T(s; 修正 v) = s^c
如何将这两个放在一起?
T(v, s) = ?
如果我适合 log(T) = a + b*log(v) + c*log(s)
Multiple R-squared = 0.9917 我得到了完美的拟合
a = -5.5 p值= 7.68e-16 ***
b = 1.7 p 值= 3.10e-12 ***
c = 2.1 p-值=
我如何看待这些结果?它们表明时间在 v 中不是线性的 但多项式 v^1.7(不是)。
谁能让我走上正轨?
ps 我知道我应该能够从理论上计算复杂度,但我不是:-(
【问题讨论】:
-
你需要超过 5 个点来插入复杂性。
-
我希望我有更多。但我也对理论上的答案感兴趣。
-
也许在这里发布您的算法(或简化版本),我们可以帮助您计算实际复杂度,而不是用数据集绘制点并有效地“猜测”
-
不,这超出了我的意图。解释比解决需要更长的时间。
标签: algorithm time-complexity curve-fitting