[解決済み] JavaでCollections#sortメソッドの時間的複雑さは何ですか?[重複しています]。
質問
の時間的複雑性はどの程度でしょうか?
Collections#sort
メソッドをJavaで作成できますか?どのようなアルゴリズムが使われていますか?
は
Collection#sort
をソートするための良い方法です。
ArrayList
の10^6?
どのように解決するのですか?
使用するJavaのバージョンに依存します。 しかし、最終的にBig-Oの時間複雑度はO(N*log(N))のままです。
Java 6の場合は、mergesortの修正版です。説明はこちらで確認してください。
Collections#sort
Java 6用
ソートアルゴリズムは、修正マージソート(lowサブリストの最大要素がhighサブリストの最小要素より小さい場合、マージが省略される)です。このアルゴリズムは、n log(n)の性能を保証している。指定されたリストは変更可能でなければならないが、サイズ変更可能である必要はない。この実装では、指定されたリストを配列にダンプし、配列をソートして、配列の対応する位置から各要素をリセットしてリストを反復処理します。これにより、リンクリストをその場でソートしようとした場合に生じる n2 log(n) のパフォーマンスを回避することができます。
Java 7では、改良されました。
Collections#sort
Java 7用
により
エンハンスメント
. なお
ティムソート
はO(N)のベストケースを持ち、以前の実装よりも高速であることが証明された。
実装上の注意:この実装は安定した適応型反復マージソートであり、入力配列が部分的にソートされている場合はn lg(n)よりはるかに少ない比較しか必要とせず、入力配列がランダムに並んでいる場合は従来のマージソートの性能を提供する。入力配列がほぼソートされている場合、この実装では約n回の比較が必要です。一時的なストレージの必要量は,ほぼソートされた入力配列の小さな定数から,ランダムに並べられた入力配列の n/2 オブジェクトリファレンスまで様々です.
この実装では、入力配列の昇順と降順を等しく利用し、同じ入力配列の異なる部分でも昇順と降順を利用することができます。2 つ以上のソート済み配列を結合するのにも適しており、 配列を連結してその結果をソートします。
この実装は Tim Peters のリストソート for Python ( ティムソート ). Peter McIlroyの "Optimistic Sorting and Information Theoretic Complexity", Proceedings of the Fourth Annual ACM-SIAM Symposium on Discrete Algorithms, pp 467-474, January 1993 のテクニックを使っているのだそうです。
この実装では、指定されたリストを配列にダンプし、その配列をソートし、配列の対応する位置から各要素をリセットしながらリストを反復処理します。これにより、リンクリストをその場でソートしようとした場合に生じる n2 log(n) の性能を回避することができます。
<ブロッククオート
をソートするのに適した方法なのでしょうか?
ArrayList
の10^6?
理屈では、十分使えます。しかし、これでは、なぜメモリ上でデータをソートする必要があるのか、疑問が残ります。もしデータがデータベースから来るのであれば、インデックス付きのカラム/フィールドを使ってソートします。そうでなければ、ソートに使うフィールドの特性をいくつか知っているかどうか、そしてO(N)時間の複雑さのアルゴリズムが使えるかどうか確認してください。
バケットソート
または
基数ソート
. 他に方法がない場合は
Collections#sort
.
関連
-
[解決済み】StringUtils.isBlank() vs String.isEmpty()
-
[解決済み】文字列中の � を置換する方法
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] 英数字のランダムな文字列を生成する方法
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] カスタムオブジェクトのArrayListをプロパティでソートする
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】popBackStack()とreplace()の操作はどう違うのですか?
-
[解決済み】不正なエスケープ文字"㊧"について
-
[解決済み】HTTPステータス500 サーブレットクラスのインスタンス化エラー [重複]。
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み】Java LinkedListでNodesを使用する
-
[解決済み] テスト
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。