次のコードがある場合:
IterateArray(object[] array)
{
for(int i=0; i<array.length; i++)
{
Dosomething(array[i]);
}
}
メソッドのDosomething(object)
時間パフォーマンスはO(log n)ですが、IterateArray
O(n)またはO(n log n)の全体的なパフォーマンスはありますか?
次のコードがある場合:
IterateArray(object[] array)
{
for(int i=0; i<array.length; i++)
{
Dosomething(array[i]);
}
}
メソッドのDosomething(object)
時間パフォーマンスはO(log n)ですが、IterateArray
O(n)またはO(n log n)の全体的なパフォーマンスはありますか?
短くてやや間違った答えは O(n log n) です。
長い答え: O(n log m )と書く方が正確です。
DoSomething が実際に配列全体に依存しない限り、単一の要素で動作しているように見えます。したがって、「m」を使用して、これを個別に区別します。
O(n log n)になります
O(log n)パフォーマンス操作をn回実行しており、Big Oで乗算が保持されるため、O(n)* O(log n)= O(n log n)
2つの異なるサイズの配列を表示している場合は、mとnを区別する必要がないことに注意してください。その理由は、mとnは両方とも定数であり、それらの成長率をグラフ化すると、それらは漸近的に同等であるためです。
O( n log n )
考えてみてください。ログ n 操作を n 回実行しています。
m オブジェクトごとに、DoSomething() のパフォーマンスが O(log n) の場合、m オブジェクトすべての合計パフォーマンスは O(m log n) になります。
「for」ループは n (配列の長さが n とします) 回反復し、各反復で「Dosomething」が実行されるため、全体的なパフォーマンスは O(n logn) になります。
乾杯