【问题标题】:Finding the time complexity of an algorithm with mixed linear and polynomial times查找具有混合线性和多项式时间的算法的时间复杂度
【发布时间】: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


【解决方案1】:

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

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

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 是一个常数,取决于测量单位。拟合几乎与上面的多项式相同。

感谢所有帮助过的人。

【讨论】:

    猜你喜欢
    • 2014-08-29
    • 1970-01-01
    • 2020-12-13
    • 2017-04-12
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多