インデックスされていないデータセットのGroupBy操作の漸近的複雑さ(big O)に興味があります。最もよく知られているアルゴリズムの複雑さと、SQLサーバーとLINQが使用しているアルゴリズムの複雑さは何ですか?GroupBy操作の漸近的な複雑さは何ですか?
答えて
GROUP BY操作自体に表示されるときに、グループが作業している基本SQLを無視すると、データは1行でスキャンされ、1回の集計で集計されるため、複雑さはO(n)にすぎません。それは線形にn(データセットのサイズ)に比例します。
複雑なクエリにGroup Byを追加すると、O(n)はグループBy が全体の式にを追加する上限になります。内部の複雑なクエリがベースクエリの解決でデータが既にソートされているようなものであれば、それは少なくなる可能性があります。
インデックスがないため、データがソートされると、すでにO(N log N)をソートしています。 (ニックピック:それはnに線形にn、すなわちnのサイズではなく、データセットのサイズにスケールする) –
@Martinho - 私は英語構文エラーを修正した。 – RichardTheKiwi
残念だがこれは間違っている。データセットを反復処理するときは、与えられた行/オブジェクトに入れたいグループを決めなければなりません。私は一定の時間内にどのようにグループ選択を行うことができるのか分かりません。 –
Linqについては、Linqからオブジェクトへのグループについて複雑さ(Enumerable.GroupBy
)を知りたいと思います。
ILSpyで実装を確認すると、O(n)と表示されます。 (.NET Framework 4シリーズ)
ソースコレクションを1回列挙します。各要素に対して、グループ化キーを計算します。次に、キーがすでに要素リストにマップされているハッシュテーブルにあるかどうかを確認し、ハッシュテーブルにキーがない場合は追加します。次に、要素をハッシュテーブル内の対応するエントリリストに追加します。
- 1. List.Addの漸近的な複雑さは何ですか?
- 2. 漸近的複雑さpython
- 3. 漸近的な時間の複雑さ指数関数
- 4. 3Sum.javaの漸近的複雑さを見つける方法
- 5. 漸近複雑度定数、なぜ定数ですか?
- 6. 動的プログラミング - 漸近的なランタイムは何ですか?
- 7. 漸近式(Big-O表記)以外のアルゴリズムの複雑さ
- 8. 操作セット(list())の複雑さは何ですか?
- 9. 怠惰な評価の漸近複雑度
- 10. 複数の操作の全体的な複雑さ?
- 11. Daskでの基本的なgroupby操作
- 12. 数値の平方根を計算するためのこの特定の(悪い)アルゴリズムの漸近的な複雑さは何ですか?
- 13. 時間複雑漸化
- 14. 複雑なリスト操作
- 15. rでの複雑な日付操作
- 16. は、このアルゴリズムの漸近時間の複雑さです。O(log n)? Pを見つける
- 17. グラフ操作アルゴリズムの複雑さ
- 18. これらの関数では時間の複雑さは(漸近的に)どのように等しくなりますか?
- 19. 複雑なオブジェクトを操作する
- 20. dist()の複雑さは何ですか?
- 21. 再帰関係の漸近的解析
- 22. 日付の複雑な配列操作
- 23. 複雑なDTOのCRUD操作
- 24. Clojureの複雑なデータ操作
- 25. Gnuplot漸近線
- 26. 漸近記法
- 27. 漸近比
- 28. スパークデータフレームGROUPBY&複雑なケース文の導出
- 29. 関数の漸近的な順序を見つけるには?
- 30. 複数のシナリオをキャプチャするためのPandasを使用した複雑なgroupby操作
SQLとLINQのGroupByは、非常に異なる2つの操作です。 –