我有一个用于信号量化的算法。对于算法,我有一个方程式,用不同的参数值计算其复杂性。该算法在C中实现。有时根据等式,我的复杂性较低,但运行时间较长。我对这个等式并不是100%肯定。
我的问题是运行时间和算法复杂性一直都是直接关系?意味着,我们拥有的复杂性越高,运行时间越长?或者从一种算法到另一种算法有什么不同?
答案 0 :(得分:1)
时间复杂度更多地衡量时间随输入大小而变化的程度,而不是绝对指标 (这是一种极端的简化,但它可以用来解释你所看到的现象。)
如果public
是您的问题大小且实际运行时间为n
,则其线性复杂度为1000000000 * n
,而0.000000001*n^2
为二次方。
如果你互相绘制它们,你会发现0.000000001*n^2
小于1000000000 * n
一直到n = 1e18左右,尽管它的复杂性更高" 34。
(0.000000001*n^2 + 1000000000 * n
也是二次的,但执行时间总是比两者都差。)
答案 1 :(得分:1)
不,运行时间和算法复杂性没有简单的关系。
估算或比较运行时间很容易变得非常复杂和详细。即使使用相同的程序和输入数据,仍有许多变量会发生变化 - 这就是为什么基准测试会进行多次运行并进行统计处理的原因。
如果您正在寻找重大差异,通常两个最重要的因素是算法复杂性("大 O ()")和启动时间。通常,较低的"大 O ()"算法需要更复杂的启动;也就是说,在进入实际循环之前,它需要在程序中进行更多的初始设置。如果执行初始设置所需的时间比运行小数据集的其余算法要长,那么较大的 O ()额定算法将为这些小数据集运行更快 。对于大型数据集,较低的 O ()算法将更快。将有一个总时间相等的数据集大小,称为"交叉"大小
为了提高性能,您需要检查大多数数据是否高于或低于该交叉,作为选择要实施的算法的一部分。
在运行时预测中获得越来越多的细节和准确性会非常快速地变得复杂得多。