Java ソートアルゴリズムの概要 (VIII): 基数ソート

Java ソートアルゴリズムの概要 (VIII): 基数ソート

基数ソートは「分散ソート」に属します。基数ソートは「バケット ソート」またはビン ソートとも呼ばれます。名前が示すように、キー値の部分的な情報を使用して、ソートする要素を特定の「バケット」に分散し、ソート効果を実現します。基数ソートは、時間計算量が O (nlog(r)m) の安定したソートです。ここで、r は基数、m はヒープの数です。場合によっては、基数ソートは他の比較ソート方法よりも効率的です。

効率分析:

時間効率: ソートするシーケンスが n レコード、d キーコード、キーコードの値の範囲が radix であると仮定します。チェーン radix ソートの時間計算量は O(d(n+radix)) です。1 回の割り当ての時間計算量は O(n)、1 回のコレクションの時間計算量は O(n) で、合計 d 回の割り当てとコレクションが実行されます。 スペース効率: キューを指すには 2*radix の補助スペースが必要であり、静的リンク リストには n 個のポインタが必要です。

実施方法:

最上位桁優先方式 (MSD 方式とも呼ばれる) では、まず k1 でソートしてグループ化します。同じグループ内のレコードでは、キー コード k1 は同じです。次に、各グループを k2 でソートし、サブグループに分割します。その後、各サブグループが最下位キー コード kd でソートされるまで、次のキー コードがこのようにソートおよびグループ化されます。次に、グループを接続して順序付けられたシーケンスを取得します。 LSD 方式と呼ばれる最下位桁優先方式では、kd のソートから開始し、次に kd-1 をソートし、k1 がソートされるまでこれを繰り返して順序付けられたシーケンスを取得します。

コード実装:

  1. 公共 クラスRadixSort {
  2. 公共 静的  voidソート( int [] 数値, int d) {
  3. 整数k = 0 ;
  4. 整数n = 1 ;
  5. 整数m = 1 ;
  6. int [][] temp =新しい  int [数値.長さ][数値.長さ];
  7. int [] 順序 =新規  int [数値.長さ];
  8. (m <= d)の間{
  9. ( int i = 0 ; i < 数値.長さ; i++) {
  10. int lsd = ((数値[i] / n) % 10 );
  11. temp[lsd][order[lsd]] = 数値[i];
  12. 注文[lsd]++;
  13. }
  14. ( int i = 0 ; i < d; i++)の場合{
  15. (順序[i] != 0 の場合
  16. ( int j = 0 ; j < order[i]; j++) {
  17. 数値[k] = temp[i][j];
  18. 関数
  19. }
  20. 順序[i] = 0 ;
  21. }
  22. 10 ;
  23. 0場合
  24. m++;
  25. }
  26. }
  27. 公共 静的  void main(String[] args) {
  28. int [] データ =
  29. { 73 22 93 43 55 14 28 65 39 81 33 100 };
  30. RadixSort.sort(データ、 10 );
  31. ( int i = 0 ; i < データ長; i++) {
  32. System.out.print(data[i] + " " );
  33. }
  34. }

基数ソートは通常、レコードのキーが整数型の場合にのみ使用されます。

紹介したさまざまな内部ソート方法の中で、クイックソート、マージソート、ヒープソートは、必要な計算時間の点で優れた方法です。ただし、マージソートにはサイズ n の補助スペースが必要であり、クイックソートにはスタックが必要です。不安定なクイックソート、ヒープソート、選択ソート、シェルソートを除き、他のソート方法は安定しています。

ソート アルゴリズムのパフォーマンスを評価する主な基準は、必要な計算時間とストレージ スペースです。計算時間に影響を与える 2 つの重要な要素は、キーが比較される回数と記録される移動回数です。実際のアプリケーションでは、どの選別方法を使用するかは、特定のアプリケーションと機械の状態によって異なります。

【編集者のおすすめ】

  1. 12.5.4 パーティションの並列基数ソート
  2. 12.5.3 負荷分散並列基数ソート
  3. 12.5.2 シリアル配列の基数ソート
  4. 12.5.1 シリアルチェーン基数ソート

<<:  Java クラシックアルゴリズム: カクテルソート

>>:  Java ソートアルゴリズムの概要 (VII): クイックソート

推薦する

教師なし機械学習は産業オートメーションにどのようなメリットをもたらすのでしょうか?

現代の産業環境にはセンサーやスマート コンポーネントが満載されており、それらすべてが組み合わさって大...

人工知能と医療画像を組み合わせたアプリケーションの4つのコア価値

「人工知能+医用画像」は、最先端の人工知能技術を医用画像診断に適用し、医師が患者の状態を診断するのを...

...

大規模なマルチモーダルモデルは、学習しすぎると能力が低下しますか?新しい研究:教育省+の一般専門家が紛争を解決

微調整により、一般的な大規模モデルを特定の業界のアプリケーションにより適したものにすることができます...

...

自動運転の世界情勢を理解するための記事

自動運転前夜2021年、ビル・ゲイツは「すべての家庭にロボットを」と題する記事を発表し、爆弾処理ロボ...

マイクロソフト CEO ナデラ氏へのインタビュー: 人工知能の全体的な方向性と将来はどのようなものでしょうか?

人工知能の将来はどうなるのでしょうか?どのような方向に発展していくべきでしょうか?開発プロセス中に注...

中国で自動運転元年となるのは何年でしょうか? 2021年かも

インテリジェント化は将来の自動車発展の基本的な方向であり、自動運転技術は将来の自動車発展の重要な最先...

イメージフリーの認識がさらに一歩前進! ScalableMap: 大規模高精度地図に向けた新しいソリューション!

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

「概念のドリフト」問題と闘おう! Google が新しい時間認識フレームワークをリリース: 画像認識精度が 15% 向上

機械学習の分野では、コンセプトドリフトという問題が長い間研究者を悩ませてきました。つまり、データの分...

焦点: 注目すべき 6 つのスマート セキュリティ トレンド

スマート セキュリティは、新しい AI 機能のおかげで、静的なセキュリティ ビデオ録画からリアルタイ...

マイクロソフトとヤフーが検索広告契約を締結、Bingがヤフーの独占アルゴリズムに

7月29日、これまでの多くの噂がついに確認された。マイクロソフトとヤフーは10年間の検索協力契約を締...

自分の写真がディープフェイクに使われるのではないかと心配ですか?ボストン大学の新しい研究を試してみてください

顔を入れ替えた動画は、DL を悪用した大きな結果です。インターネット上にあなたの写真がある限り、あな...