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

ブログ    

推薦する

...

私の国は、5G、人工知能、自動運転で目覚ましい成果を上げ、革新的な国の仲間入りを果たしました。

世界の潮流は力強く前進しています。科学研究​​と探究のペースを止めれば、井戸の中で空を眺め、満足して...

オプティマイザーを選択するにはどうすればいいですか?この記事では、さまざまなMLプロジェクトに適したオプティマイザーを選択する方法を説明します。

機械学習プロジェクトに適したオプティマイザーを選択するのは簡単な作業ではありません。オプティマイザー...

...

PyTorch を使用した Mixture of Experts (MoE) モデルの実装

Mixtral 8x7B の発売は、オープン AI の分野、特に Mixture-of-Expert...

GPT-3を超えて、DeepMindは新しいお気に入りのGatoをリリースしましたが、「スープは変えても薬は変えない」と疑問視されています

大規模な言語モデリングにヒントを得て、Deepmind は同様のアプローチを適用し、マルチモーダル、...

革新的なマイクロチップ設計によりコンピューティングがエッジにまで広がり、AIをリアルタイムで使用できるようになります。

人工知能によるコンピュータネットワークへの需要の爆発的な増加に対処するため、プリンストン大学の研究者...

モデル圧縮率95%、MIT Han Songらが新しいLite Transformerを提案

Transformer の高性能は非常に高い計算能力に依存しており、モバイル NLP に大きな制限が...

...

モバイルインターネット開発における人工知能技術の応用

[[189519]]インテリジェントな需要は2つの側面に反映されるモバイル インターネットの発展が新...

...

AIはデジタル変革の失敗から学ぶ必要がある

1 月に IBM は、デジタル トランスフォーメーションが予測された 150% ではなく -5% ~...

AIは人類にとって脅威でしょうか?人工知能には強いものと弱いものがあるが、本当の危険は強い人工知能である

近年、科学技術分野で最もホットな言葉は人工知能であり、これは近年の人工知能の急速な発展によるものです...

Python の高レベル自然言語処理ライブラリである SpaCy は、世界最速の構文解析ツールとして知られています。

spaCy は、最先端の研究に基づいて構築され、実際の製品での使用のためにゼロから設計された、Py...