图和渐近分析之间的差异,以比较算法的 运行 次

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

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

我有一个算法,我在徘徊什么是更好的方法来实现啊 'Big-Oh' 运行 时间 - 通过图表并根据 运行 时间绘制输入数量,还是通过渐近分析?

对于我目前使用的图表:

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

'measuring'算法的运行时间的两种方法有什么区别?

"empiric"(根据输入大小绘制 运行 时间)的问题是它仅适用于提供的测试用例

"theoretic"分析给你算法的所有陷阱,你可以用数学分析真实的最佳情况/平均情况/...,保证正确。

一个很好的常见示例是 simplex algorithm,它通常非常快,但对于某些输入来说偶尔会有指数最坏情况 运行 时间。

另一方面,由于渐近分析忽略常数,只适用于"large enough inputs",如果输入预计比较小,它们几乎没有用,很难区分 2具有相同复杂度的算法 class,但具有不同的常量,并且常量在生产代码中很重要。

tl;dr:每个都有自己的用法,将两者结合起来比只使用其中一个效果更好。

附带说明一下,在使用实证方法时,一定要使用统计工具,statistical hypothesis testing特别是在下结论之前。此外,请始终记住,经验工具仅对您检查的 class 问题有效(因此,如果您不检查排序数组,您将不知道快速排序可能需要更长的时间,如果它遇到一个)。