アルゴリズムだけでなくシステムが複雑なため、この種の質問には3つ以上のデータポイントが必要だと思います。
私が行うことは、反復と経過時間を比較し、標準時間計算量の1つに一致するパターンを見つけることができるかどうかを確認することです。
- 定数:O(c)ここで、cは定数です。
- 線形:O(n)
- 多項式:O(n ^ c)ここで、cは定数(またはO(n ^ 2 + n ^ 6)のような複雑なもの)です。
- 指数関数:O(c ^ n)ここで、cは定数です。
- 対数:O(log | n |)
- これが何と呼ばれるか:O(n log | n |)
あなたの問題を調べてみましょう:
n | time
4096 | 512 ms
16384 | 1024 ms
36864 | 1536 ms
nが4倍(4096から16384)上がると、時間は2倍(512から1024ミリ秒)上がります。
nが9倍(4096から36864)上がると、時間は3倍(512から1536ミリ秒)上がります。
これに一致する関数はf(n)= n ^(1/2)です。nが4倍になると、f(n)はsqrt(4)の倍になります。
したがって、これは次数O(n ^ .5)であり、多項式です。
TLDR:グラフ化して、時間計算量の一般的な関数と一致させます。現実の世界では、おそらく3つ以上のデータポイントが必要になります。
編集:これは本当にもっと複雑なはずだということを付け加えたいと思います。あらゆる種類の時間計算量には定数項が存在する可能性があります。つまり、O(n ^ c)はO(n ^ c + K)である可能性が高くなります。ここで、Kは定数です。これを書き出すときは、簡単にするために定数を無視しますが、グラフに表示されます。