web-dev-qa-db-ja.com

Linq OrderBy()。ThenBy()メソッドシーケンスの時間計算量はどれくらいですか?

プロジェクトでLinqとLambdaOperationsを使用しており、クラスの2つのプロパティに従ってリストを並べ替える必要がありました。したがって、次のようにOrderBy()。ThenBy()メソッドを使用しました。

class ValueWithIndex{
    public long Value;
    public int Index;
}
...

List<ValueWithIndex> valuesWithIndex = new List<ValueWithIndex>();

for (int i = 0; i < A.Length; i++){
    ValueWithIndex vi = new ValueWithIndex();
    vi.Value = A[i];
    vi.Index = i;
    valuesWithIndex.Add(vi);
}
var orderedValues = valuesWithIndex.OrderBy(v => v.Value).ThenBy(v => v.Index);

...

This の回答では、OrderBy()はQuicksortを使用するため、O(N * logN)の平均時間の複雑さがあるとしても、最悪の場合、時間の複雑さはO(N2)。 ThenBy()メソッドの時間計算量がO(N2)、これらの方法を使用することは無意味です。

ThenBy()メソッドもクイックソートを使用していますか?はいの場合、同じ「v.Value」に対して「v.Index」がO(N)でソートされることを意味しますか?2)最悪の時間計算量?

19

LINQ OrderBy(...).ThenBy(...)...ThenBy(...)メソッドチェーンは、単一ソート操作を複数のソートキー(マルチキー比較器を使用)で形成します。

したがって、チェーンに含めるThenBy(Descending)メソッドの数に関係なく、ソート操作の時間計算量は、QuickSort O(N * logN)平均/ O(N2) 最悪の場合。もちろん、追加するキーが増えると、2つのオブジェクトの比較に時間がかかりますが、並べ替え操作の複雑さは変わりません。

27
Ivan Stoev