2015-10-23 18 views
5

質問は私が求めていることをかなり言います。アルゴリズムの実行時間を比較するグラフと漸近分析の違い

私はアルゴリズムを持っており、実行時間に対する入力数をプロットするか、または漸近分析を使って、グラフを使って「ビッグオー」の実行時間を達成するためのより良いアプローチを迷っていましたか?私のグラフの

私は現在使用しています:

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

alogrithmの運転時間「を測定する」の両方の方法の違いは何ですか?

答えて

4

"empiric"(入力のサイズに対して実行時間をプロット)の問題は、です。これは、提供されたテストケースでのみ機能します。

"理論的"分析は、アルゴリズムのすべての落とし穴を与え、真の最良のケース/平均の場合/を数式を使って分析することができ、正しいことが保証されています。

一般的な例としては、普通はかなり速いですが、いくつかの入力に対して時折指数関数的に最悪の場合の実行時間を持つsimplex algorithmがあります。

一方、定数を無視した漸近解析では、「十分な大きさの入力」にしか適用されませんが、入力が比較的小さいと予想される場合はほとんど役に立たず、2つのアルゴリズム同じ複雑さのクラスではあるが、定数が異なり、定数はプロダクションコードで重要です。

TL; DR:それぞれ独自の使い方を得た、との両方を組み合わせることだけそれらのを使用してより良い結果を提供します。

経験的手法を使用する場合は、特に統計ツールを使用してください。具体的には結論を出す前にstatistical hypothesis testingを使用してください。また、経験的ツールはチェックした問題のクラスに対してのみ有効であることを常に覚えておいてください(たとえば、ソートされた配列をチェックしないと、quicksortが見つかった場合、quicksortにかなりの時間がかかることはありません)。

関連する問題