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): クイックソート

ブログ    

推薦する

MySQLにおける結合アルゴリズムの実装原理の分析

MySQL には、有名なネスト ループ結合という結合アルゴリズムが 1 つだけあります。他の多くのデ...

Google MITの最新の研究は、高品質のデータを入手することは難しくなく、大規模なモデルが最適な方法であることを証明しています。

高品質なデータの取得は、現在の大規模モデルのトレーニングにおける大きなボトルネックとなっています。数...

自然言語処理がCOVID-19に対する世界的な戦いに貢献

インターネットの普及と膨大な情報の出現により、人工知能の分野における重要な方向性としての自然言語処理...

AIイノベーションの解放:自然言語処理技術とアプリケーション

1. はじめに自然言語処理(NLP)技術は人工知能の分野で重要な部分を占めており、その開発と応用は私...

Google が 7 つの言語で新しいデータセットをリリース: BERT などの多言語モデル タスクの精度が最大 3 倍向上します。

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

国産初のオープンソースMoE大型モデルが登場!パフォーマンスはLlama 2-7Bに匹敵し、計算量は60%削減されます。

オープンソースのMoEモデルがついに国内初のプレイヤーを迎えます!そのパフォーマンスは高密度の Ll...

HTML5アウトラインアルゴリズムが構造に与える影響

[[91338]] HTML5 がリリースされてから長い時間が経ちますが、日々の仕事や個人の Web...

人工知能と機械学習、クラウドコンピューティング、5Gは2022年に最も重要なテクノロジーになる

この調査の結果、人工知能と機械学習、クラウドコンピューティング、5Gテクノロジーが2022年に影響を...

スマートコックピット、進行中のインタラクティブ革命

今日では、スマートカーは都市ネットワークにおける「デジタルノード」となっています。優れた環境認識能力...

PyTorch 1.0 プレビューがリリースされました: Facebook の最新のオープンソース AI フレームワーク

Facebook は、人工知能プロジェクトで独自のオープンソース AI フレームワーク PyTorc...

...

マイクロソフトのAI研究者が、クラウドストレージリンクの設定ミスにより、大量の内部データを誤って公開した。

9月19日、サイバーセキュリティ企業の最新調査によると、マイクロソフトの人工知能研究チームがソフト...

ビジュアルMambaモデルのSwinの瞬間:中国科学院、HuaweiなどがVMambaを発表

大型模型の分野におけるトランスフォーマーの地位は揺るぎない。しかし、モデルのサイズが拡大し、処理する...

YOLOの父は抗議を表明するためにCV業界を辞め、軍事やプライバシーのスヌーピングにAIアルゴリズムを使用することを拒否

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...