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のポストを主張した

ブログ    
ブログ    

推薦する

2018 年に「破壊的な」変化をもたらす 12 のテクノロジー

[[223288]]人工知能から拡張現実まで、今年、将来を見据えた企業のビジネスを牽引する破壊的なテ...

AIの安全性問題への対応: NIST人工知能リスク管理フレームワーク

他の情報技術と同様に、人工知能もさまざまなセキュリティ問題や、プライバシー、差別、不公平などの新たな...

AI によるマインドリーディング: コンピューターはどのようにして脳波を復元するのか?

[[255490]]画像出典: Visual China 「私の体は潜水鐘のように重いが、私の心は...

AI による効率化: データセンターのエネルギー使用を再定義

今日のデジタル時代において、データ センターは、私たちのつながった世界を動かし続けるための膨大な情報...

AlphaFold2の最初の公開PyTorchバージョンが複製可能になりました。コロンビア大学のオープンソースで、1,000以上のスターが付いています。

ちょうど今、コロンビア大学のシステム生物学助教授であるモハメッド・アルクライシ氏が、AlphaFol...

ロボットにとっては、這う方が移動には良い方法かもしれない

世界中の科学者の中には、ロボットの歩行能力を強化するために取り組んでいる者もいれば、異なる視点からロ...

ディープラーニングを使用してビデオから車両速度を推定する

私が解決したい問題は、車にカメラが付いていて、車がどれくらいの速さで走っているのかを知りたいというこ...

大企業に必須の、偉大な神からのオープンソースアルゴリズムツールブック

近年、大企業への入社要件はますます高くなり、アルゴリズムに対する要求も徐々に高まっています。アルゴリ...

中国にはどのような人工知能の人材が必要でしょうか?

[[233697]] 「『AI』が何の略か、誰もが知っているとは思いません。アルゴリズムはあっても...

製造業における人工知能の8つの応用シナリオ

人工知能の概念は、60年以上前の1950年代に初めて提案されました。しかし、モノのインターネット、ビ...

ドローン自動化システムの産業への応用を探る

世界中の企業は、競合他社に対して競争上の優位性を獲得するのに役立つ高度なテクノロジーを常に探していま...

ブロックチェーンのコンセンサスアルゴリズムとは何ですか?

所有権や金額などの取引の基本的な特性は、基本的な数学的特性に基づいて機能する公開鍵暗号化のおかげで簡...

モデルの一般化にはSGDに匹敵するフルバッチGDのランダムトレーニングは必要ない、ネットユーザー:計算コストは​​手頃ではない

[[431688]]最近、機械学習モデルは、モデルパラメータが増えながらも一般化性能が良好な大規模モ...

自動運転業界は2021年に爆発的な成長を遂げるでしょうか?

2020年は自動運転業界が徐々に安定する年だ。ウェイモなどの巨大企業が商業化の模索を開始し、テスラ...