【问题标题】:Difference between graphs and asymptotic analysis to compare running times of an algorithm图和渐近分析之间的差异以比较算法的运行时间
【发布时间】:2015-10-23 16:26:03
【问题描述】:

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

我有一个算法,但我正在徘徊什么是实现啊'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;

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

【问题讨论】:

    标签: java algorithm performance big-o time-complexity


    【解决方案1】:

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

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

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

    另一方面,由于渐近分析忽略常数,并且只适用于“足够大的输入”,如果预计输入相对较小,它们几乎没有用,并且很难区分两种算法相同的复杂度类,但具有不同的常量,并且常量在生产代码中确实很重要。

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

    附带说明,在使用经验方法时,请务必使用统计工具,并在得出结论之前专门statistical hypothesis testing。另外,请始终记住,经验工具仅对您检查的问题类别有效(因此,例如,如果您不检查排序数组,您将不知道快速排序遇到问题时可能需要更长的时间)。

    【讨论】:

      猜你喜欢
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多