我试图找出二次选择算法何时比线性选择算法更快。运行一些实验我生成了两个3D图,显示算法运行时间作为输入数组大小和所需顺序统计量的函数。使用gnuplot绘制绘图我确认有些情况下二次算法更快。然后我使用gnuplot的拟合算法找到两个函数来模拟我观察到的运行时间(a,b,c,d,e,f是我已经找到的常量但是没有出现):
lin_alg_runtime(x,y)= a x + b y + c
quad_alg_runtime(x,y)=(d * x * e * y)+ f
其中x是输入数组的大小,y是顺序统计。
现在我对如何使用这些模型来计算何时在二次实现和线性实现之间切换感到很遗憾。我怀疑我必须找到这两个函数相交的地方,但我不太清楚该怎么做。如何找到这两个函数相交的位置?
答案 0 :(得分:1)
基本上,您希望使用运行时估计值最低的算法。
您可以只计算每个估计运行时的值,并使用最低值的算法。你可以稍微简化一下。
您希望在以下情况下使用quad算法:
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
,如果它小于零,则使用二次算法。