2009-12-02 58 views
1

我试图找出当一个二次选择算法比线性选择算法更快。运行一些实验,我生成了两个3D图,显示算法运行时间作为输入数组大小和所需顺序统计量的函数。使用gnuplot绘制绘图我证实了有些情况下二次算法更快。然后,我使用gnuplot的拟合算法来找到两个函数,它们模拟了我观察到的运行时间(a,b,c,d,e,f是我已经发现但省略的常量):一个表面的交点一个平面

lin_alg_runtime(x,y)=一个X + b Y + C

quad_alg_runtime(X,Y)=(d * X * E * Y)+ F

其中x是输入阵列和y的大小次序统计。

现在我对如何使用这些模型来计算何时在二次实现和线性实现之间切换感到迷茫。我怀疑我必须找到这两个功能相交的地方,但我不太确定如何做到这一点。如何找到这两个函数相交的地方?

+0

你可以仔细检查quad_alg_runtime(x,y)函数吗?我希望它应该由d * x * e * y? (否则它是独立的,这似乎很奇怪) – 2009-12-02 04:25:23

+0

谢谢!修正了错字 – Frank 2009-12-02 04:30:30

回答

1

基本上你想使用具有最低运行时估计的算法。

您可以计算每个估算运行时间的值,并使用最低值的算法。你可以稍微简化一下。

您想使用四算法时:

qual_alg_runtime(x,y) < lin_alg_runtime(x,y) 
ax + by + c < dxey + f 
ax + by -dexy + c-f < 0 

因此你可以计算ax + by -dexy + c-f,如果它小于零,则使用二次算法。

+0

Doh!我很尴尬,错过了这一点。谢谢 – Frank 2009-12-02 04:53:23

相关问题