私は、漸近複雑度List.Add()
について多くの論争があることを発見しました。私が疑うのは、最悪のシナリオであるthat causes underlying array to resizeであり、論理的にはO(n)
の操作になります。ただし、毎回array grows twice in sizeに空き領域がなくなります。これにより、n
要素に必要なサイズ変更の量はlog(n)
に比例します。List.Addの漸近的な複雑さは何ですか?
つまり、の平均操作での漸近的な複雑さはO(n/log(n))
になりますか?
List.Add()
の実際のベンチマークは以下のとおりです。しかし、ベンチマークはそのような操作に実際には表現されていません。ストレート(対数目盛り)からのずれが目に見えるようになる前にメモリが不足している可能性があります。
実際には、既存のN/2要素が移動したときに配列が拡大します。だから、あなたはそれがログNだと思うのですが、しかしまだ新しい容量は指数関数的に成長していません。それは効果に対抗します。最初の要素はlog N回移動します。最後のN/2要素は0回または1回移動されます。 – usr