繁体   English   中英

图的差异和渐近分析比较算法的运行时间

[英]Difference between graphs and asymptotic analysis to compare running times of an algorithm

这个问题几乎说明了我的要求。

我有一个算法,我正在徘徊什么是更好的方法来实现啊'大哦'运行时间 - 通过图表和绘制输入的数量与运行时间,或通过渐近分析?

对于我目前正在使用的图表:

private int startTime = System.currentTimeMillis(); //At start of algorithm
private int endTime = System.currentTimeMillis(); //At the end of algorithm
int runningTime = endTime - startTime;

两种“测量”算法运行时间的方法有什么区别?

“经验”(绘制运行时间与输入大小的关系)的问题是它仅适用于提供的测试用例

“理论”分析为您提供算法的所有缺陷,您可以使用数学分析真实的最佳案例/平均情况/ ...并保证其正确。

一个很好的常见例子是单纯形算法 ,它通常非常快,但对某些输入偶尔会出现指数最坏情况的运行时间。

另一方面,由于忽略常数的渐近分析,并且仅适用于“足够大的输入”,如果预期输入相对较小,则它们几乎无用,并且难以区分相同复杂度的2个算法class,但具有不同的常量,并且常量在生产代码中很重要。

tl; dr :每个都有自己的用法,并且两者结合使用比仅使用其中一个更好。

作为旁注,在使用经验方法时,请务必在得出结论之前使用统计工具和统计假设检验 此外,请始终记住,经验工具仅对您检查的问题类有效(因此,如果您不检查排序的数组,例如,如果遇到快速排序可能会花费更长的时间)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM