アルゴリズム実行時間のどのモデルが存在しますか?
私たちは皆、mergesort が bublesort よりも高速であることを期待しており、mergesort は O(n log n) の比較を行うのに対して、bublesort の場合は O(n 2 ) を行うことに注意してください。
他のアルゴリズムでは、ポインター逆参照、配列ルックアップ、固定サイズの整数の算術演算など、(比較とスワップ以外の) 他の操作をカウントします。
実行時間をモデル化する他の方法はありますか?
私自身が知っているのは、ディスクから読み取られ、ディスクに書き込まれたブロックの数を数えることです。Big-O表記が失敗するのはいつですか?に対する私の回答を参照してください。長い説明のために。
もう 1 つは、キャッシュ ミスの数を数えることです。これは、メモリ階層のすべてのレベルを調べることで、I/O モデルを拡張します。
分散アルゴリズム (安全なマルチパーティ計算など) の 3 つ目は、ネットワークを介して送信されたデータの量をカウントすることです (通常、通信のラウンドまたはメッセージ数で測定されます)。
アルゴリズムのパフォーマンスを予測するために数えるべき (そして数えない!) 他に興味深いものは何ですか?
また、これらのモデルはどれくらい優れていますか? 私が聞いた限りでは、キャッシュを無視するアルゴリズムは、ディスク上のデータに対する I/O 効率の高いアルゴリズムと競合しますが、インメモリ アルゴリズムでは競合しません。
具体的には、これらのモデルが相対的なパフォーマンスを誤って予測するのは、具体的にどのような場合ですか? 私自身の実験によると、データがメモリに収まるほど小さい場合、フィボナッチ ヒープは (バイナリ ヒープと比較して) Dijstra の最短パスを高速化しません。