找出具有混合线性和多项式时间的算法的时间复杂度

Finding the time complexity of an algorithm with mixed linear and polynomial times

我正在尝试根据经验计算出我编写的算法的复杂性。我在输入中有两个变量:数据集大小(矩阵的维度)和计算值的数量。

当我查看随值数量变化的复杂性时,它是线性的。

当我查看改变集合大小的复杂性时,它是多项式的。

我想估计复杂度系数。所以, 假设 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)

我非常适合 R 平方 = 0.9917

a = -5.5 p 值= 7.68e-16 ***

b = 1.7 p 值= 3.10e-12 ***

c = 2.1 p 值= < 2e-16 ***

我如何看待这些结果?它们表明时间在 v 中不是线性的 但是多项式 v^1.7(不是)。

任何人都可以让我走上正轨吗?

ps 我知道我应该能够从理论上计算复杂度,但我不是:-(

我找到了一个解决方案,也许不是最好的,但效果很好。

我意识到问题是线性关系的截距和斜率随集合大小而变化。所以,我使用了这个模型

T(v, s) = a(s) + b(s)*v

为了估计参数,首先我估计了每个集合的系数 a(s) 和 b(s),然后在 s 上对它们进行回归。该关系仍然是多项式 [log(a(s)) = g + h*log(s),类似于 b(s)]。意外的是,结果是b(s) = -a(s),所以最后的分离函数是

T(v, s) = 10^k·s^2.1(v - 1)

其中 k 是一个常数,取决于测量单位。拟合与上面的多项式几乎相同。

感谢所有帮助过的人。