Java プログラミング スキル - データ構造とアルゴリズム「マージ ソート」

Java プログラミング スキル - データ構造とアルゴリズム「マージ ソート」

[[393503]]

基本的な紹介

マージソートは、マージの考え方を使用するソート方法です。このアルゴリズムは、古典的な分割統治戦略を採用しています(分割統治法では、問題をいくつかの小さな問題に分割してから再帰的に解決し、統治段階では分割された段階で得られた答えを「パッチ」でまとめます。つまり、分割統治です)。

概略図

注: この構造は完全な二分木に非常に似ていることがわかります。この記事では、再帰を使用してマージ ソートを実装します (反復的な方法で実装することもできます)。ステージは、サブシーケンスを再帰的に分割するプロセスとして理解できます。

処理段階を見てみましょう。2 つの順序付けられたサブシーケンスを 1 つの順序付けられたシーケンスにマージする必要があります。たとえば、下の図の最後のマージでは、2 つの順序付けられたサブシーケンス [4,5,7,8] と [1,2,3,6] を最終シーケンス [1,2,3,4,5,6,7,8] にマージする必要があります。実装手順を見てみましょう。

コードサンプル

  1. パッケージ com.structures.sort;
  2.  
  3. blic クラス MergeSort {
  4. 公共 静的void main(String[] args) {
  5. int [] arr = 新しいint [80000];
  6. ( int i = 0; i < 80000; i++) {
  7. arr[i] = ( int ) (Math.random() * 8000000);
  8. }
  9. int [] temp = 新しいint [arr.length];
  10. 長い開始 = System.currentTimeMillis();
  11.  
  12. マージソート(arr,0,arr.length-1, temp );
  13. 長い終了= System.currentTimeMillis();
  14. System.out.println ( "所要時間:" +((終了- 開始))+ "ミリ秒" );
  15. /*
  16. 所要時間: 15ms
  17. */
  18. }
  19.  
  20. //分離+組み合わせ
  21. 公共 静的void mergeSort( int [] arr, int   int   int [] temp ){
  22. <)の場合{
  23. int中央 = (+) / 2;
  24. //左に再帰的に分解する
  25. mergeSort(arr、 left 、mid、 temp );
  26. //右方向に再帰的に分解する
  27. mergeSort(arr, mid + 1, right , temp );
  28. //マージ
  29. マージ(arr、、中央、一時);
  30. }
  31. }
  32.  
  33. /**
  34. * マージ
  35. * @param arr ソートされた元の配列
  36. * @param left左順序シーケンスの初期インデックス
  37. * @param mid 中間インデックス
  38. * @param right右インデックス
  39. * @param tempは転送配列です
  40. */
  41. 公共 静的voidマージ( int []arr, int   int中央、 int   int [] temp ){
  42. int i = left ; // 左の順序付きシーケンスの初期インデックス i を初期化します
  43. int j = mid + 1; // 右側の順序付きシーケンスの初期インデックス j を初期化します
  44. int t = 0; //一時配列の現在のインデックスを指します
  45.  
  46. //(1つ)
  47. //まず、ルールに従って、左側と右側の(順序付けられた)データを一時配列に入力します
  48. //左側と右側の順序付けられたシーケンスの1つが処理されるまで、つまりすべてが一時配列に入力されるまで
  49. (i <= 中央 && j <=) の間 {
  50. // 左側の順序付けられたシーケンスが右側の順序付けられたシーケンスの現在の要素より小さいか等しい場合
  51. // 左側の現在の要素を一時配列にコピーします
  52. //次にt++、i++を後方に移動する
  53. もし(arr[i] <= arr[j]){
  54. temp [t] = arr[i];
  55. t += 1;
  56. 私 += 1;
  57. } else // 逆に、右側の順序付きシーケンスの現在の要素を一時配列に入力します
  58. temp [t] = arr[j];
  59. t += 1;
  60. 1 を越える
  61. }
  62. }
  63.  
  64. //(二)
  65. // 残りのデータをtempに順番に埋め込む 
  66. while (i <= mid){//左側にまだ残っているので、それを一時配列に入力します。
  67. temp [t] = arr[i];
  68. t += 1;
  69. 私 += 1;
  70. }
  71. (j <=) の間 {
  72. temp [t] = arr[j];
  73. t += 1;
  74. 1 を越える
  75. }
  76.  
  77. //(三つ)
  78. // temp配列の要素をarrにコピーします
  79. //毎回すべてがコピーされるわけではないことに注意してください
  80. // 最初のマージ leftTemp = 0、 right = 1、2 番目のマージ leftTemp = 2、 right = 3、3 番目のマージ leftTemp = 0、 right = 3...
  81. t = 0;
  82. int leftTemp =;
  83. (左温度<=){
  84. arr[左温度] =温度[t];
  85. 左温度 += 1;
  86. t += 1;
  87. }
  88. }

【編集者のおすすめ】

  1. Ubuntu Linux に Windows 10 をインストールする最も簡単な方法
  2. システムのハードウェア情報を表示するためによく使用される Linux コマンド 9 つ (例と詳細な説明付き)
  3. この記事では、なぜこれほど多くの人が暗号通貨に投機しているのかを説明します。
  4. 10万スターを獲得したGitHubオープンソースプロジェクト10選
  5. Excel さえも凌駕します! WPS のこれらの機能をご存知ですか?

<<:  AI、機械学習、ディープラーニングの解放

>>:  AIを使って古い写真をカラー化するのは本当に正確なのでしょうか?技術界と歴史界は1,000のポストを主張した

ブログ    
ブログ    

推薦する

Pythonを学ぶときは、学習の方向性と開発ツールの選択を明確に知っておく必要があります。

Python はスクリプト言語であり、さまざまな他のプログラミング言語で記述されたモジュールを結合...

...

機械学習がゲームにおける物理シミュレーションに革命をもたらす

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

あらゆる場所でのAI実現へ: 人工知能分野におけるインテルの躍進

[51CTO.comからのオリジナル記事]クラウドコンピューティング、ビッグデータ、5G、モノのイン...

システムの観点から見た中国の人工知能開発の現状

第四次産業革命が急速に起こりつつあります。人工知能はこの産業革命の中核となる内容の一つです。産業革命...

機械学習の理論的基礎はどの程度しっかりしているのでしょうか?

機械学習の分野では、いくつかのモデルが非常に効果的ですが、その理由は完全にはわかっていません。逆に、...

ネイチャー誌の表紙:量子コンピューターの実用化はまだ2年先

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

小さな機械学習: 次の AI 革命

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

...

回帰、分類、クラスタリング: 機械学習アルゴリズムの長所と短所を分析する 3 つの主要な方向

このチュートリアルでは、著者が最新の機械学習アルゴリズムについて簡単に実践的なレビューを行います。同...

...

1780億のパラメータを持つこの言語モデルは、王者GPT-3に挑戦するためだけに作られたのでしょうか?

誰かがGPT-3の独占に挑戦しなければなりません! GPT-3 は発売以来、最大の AI 言語モデル...

ついに誰かが教師あり学習を明確にした

01 教師あり学習とは何か教師あり学習を行うには、コンピューターが学習できるラベルが付いたサンプル...

MITのロボット犬がまた進化しました。砂利や氷の上でも滑らずに走れます。今回は本当に犬と同じくらい安定しています

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