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

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

[[389058]]

ヒープソートの基本

  1. ヒープソートは、ヒープデータ構造を使用して設計されたソートアルゴリズムです。ヒープソートは選択ソートです。最良、最悪、平均の時間計算量はすべて O(nlogn) であり、不安定なソートです。
  2. ヒープは、次の特性を持つ完全な二分木です。各ノードの値は、その左と右の子ノードの値以上であり、最大ヒープと呼ばれます。注: 最大子ノード値のサイズ関係は要件ではありません。
  3. 各ノードの値は、左と右の子ノードの値以下であり、これをミニヒープと呼びます。
  4. 最大ヒープ特性: arr[i ] >= arr[2i+1] && arr[i] >= arr[2i+2]、iはノード番号に対応し、iは0から始まります。
  5. ミニヒープの特性: arr[i ] <= arr[2i+1] && arr[i] <= arr[2i+2]、iはノード番号に対応し、iは0から始まります。
  6. 一般的に、昇順の場合は大きなトップヒープが使用され、降順の場合は小さなトップヒープが使用されます。

ヒープソートの基本的な考え方

  1. ソートするシーケンスを大きなトップヒープに構築する
  2. この時点で、シーケンス全体の最大値はヒープの最上部にあるルート ノードになります。
  3. 配列の最後の要素と交換すると、最後が最大値になります。
  4. 次に、残りの n-1 個の要素をヒープ内に再構築し、n 個の要素の次に小さい値を取得します。このプロセスを繰り返して繰り返すことで、順序付けられたシーケンスを取得できます。

最大ヒープ構築の過程で、要素数が徐々に減少し、最終的に順序付けられたシーケンスが得られることがわかります。

配列内の非リーフノードの数 = arr.length / 2 - 1

コード例

  1. パッケージ com.xie.tree;
  2.  
  3. パブリッククラスHeapSort {
  4. 公共 静的void main(String[] args) {
  5. int [] arr = 新しいint [8000000];
  6. ( int i = 0; i < 8000000; i++) {
  7. arr[i] = ( int ) (Math.random() * 800000000);
  8. }
  9. 長い開始 = System.currentTimeMillis();
  10. ヒープソート(arr);
  11. 長い終了= System.currentTimeMillis();
  12. System.out.println ( "所要時間:" +( end -start)+ "ms" );
  13. /**
  14. * 800万件のデータ
  15. * ヒープソート!!
  16. * 消費時間: 2482ms
  17. */
  18. }
  19.  
  20. 公共 静的voidヒープソート( int []arr){
  21. 整数 温度= 0;
  22. System.out.println ( "ヒープソート!!" ) ;
  23.  
  24. //1. 順序付けられていないシーケンスからヒープを作成し、昇順と降順の要件に従って、大きいトップ ヒープまたは小さいトップ ヒープを選択します。
  25. ( int i = arr.length / 2 - 1; i >= 0; i --) {  
  26. ヒープを調整します(arr、i、arr.length);
  27. }
  28. //2. ヒープの先頭要素を配列の末尾要素と交換し、最大の要素を配列の末尾に「シンク」します。
  29. //3. ヒープ定義を満たすように構造を再調整し、ヒープの最上位要素と現在の終了要素を交換し続け、シーケンス全体が整うまで調整 + 交換手順を繰り返し実行します。
  30. ( int j = arr.length - 1; j > 0; j --) {  
  31. //交換
  32. temp = arr[j];
  33. arr[j] = arr[0];
  34. arr[0] =一時;
  35. ヒープを調整します(arr, 0, j);
  36. }
  37. }
  38.  
  39. /**
  40. * 配列(バイナリツリー)を大きなトップヒープに調整する
  41. * 機能: iに対応する非リーフノードのツリーを最大ヒープに調整する
  42. *
  43. * @param arr 調整する配列
  44. * @param i は配列内の非リーフノードのインデックスを表します
  45. * @param lengthは調整される要素の数を示し、長さは徐々に減少します
  46. */
  47. 公共 静的void調整ヒープ( int [] arr、 int i、 int長さ) {
  48. //まず現在の要素の値を取り出して一時変数に保存します
  49. 整数  temp = arr[i];
  50. //k = 2 * i + 1 はノード i の左の子ノードです
  51. ( int k = 2 * i + 1; k < 長さ; k = k * 2 + 1) {
  52. //左の子ノードの値が右の子ノードの値より小さい場合
  53. (k + 1 < 長さ && arr[k] < arr[k + 1]) の場合 {
  54. k++; //kは右の子ノードを指す
  55. }
  56.  
  57. //子ノードの値が親ノードの値より大きい場合
  58. もしarr[k] > tempであれば
  59. // 大きい方の値を現在のノードに代入する
  60. arr[i] = arr[k];
  61. //!!! iはkを指し、ループして比較を続けます
  62. 私 = k;
  63. }それ以外{
  64. 壊す;
  65. }
  66. }
  67.  
  68. // forループが終了すると、i を親ノードとするツリーの最大値を一番上に配置します。
  69.  
  70. //調整された位置に温度値を配置します
  71. arr[i] =一時;
  72. }
  73. }

【編集者のおすすめ】

  1. 妹に Java 16 の新機能について話しましたが、とても素晴らしいそうです!
  2. IT プロジェクトが多すぎて管理が難しくなっていませんか?いいえ!あなたはまだこの7つのコツを学んでいないからです
  3. Pythonを5年間学んできましたが、これらのウェブサイトをもっと早く知らなかったことを後悔しています。ぜひ一緒に見に来てください。
  4. Java はすでに 16 まで達しているのに、なぜまだ 8 が使われているのでしょうか? どんどん悪化しているのでしょうか?
  5. すごいですね! Windows 10 のこれらのブラックテクノロジー機能を使用したことがありますか?

<<:  「水中ドローン」が登場?柔らかいロボット魚が世界最深の海溝を探索

>>:  6G はテクノロジーにおける最大の投資の 1 つになりますが、何が欠けているのでしょうか?

ブログ    
ブログ    

推薦する

ラオ・ファン氏が投資に参加し、MITの中国人女性科学者が2億ドルの資金を調達! 10,000台のH100が1000億以上のパラメータでAIエージェントをトレーニング

今、シリコンバレーに新たな AI ユニコーンが誕生しました!この中国人女性科学者が設立した会社はIm...

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

[[389315]]基本的な紹介n 個のリーフ ノードとして n 個の重みが与えられ、バイナリ ツ...

2018年に人工知能はどのように発展するでしょうか?ここに8つの予測があります

編集者注:PwCは、2018年の人工知能の開発動向を調査し、8つの予測を行ったレポートを発表しました...

AI を活用した会話型顧客体験の可能性を引き出す方法

企業は AI ツールを使用して、顧客ロイヤルティにプラスの影響を与え、利益を増やすことができる会話型...

顔認証決済は時代遅れですか?アマゾンはわずか0.3秒で手動支払いをテストした

北京時間9月4日の朝のニュース、ニューヨークポストによると、アマゾンのエンジニアは店内での買い物の精...

モデルの解釈可能性に関する詳細な考察: それはどこから来て、どこに向かうのか?

この記事の著者である Cody Marie Wild は、機械学習分野のデータ サイエンティスト (...

マイクロソフトはセキュリティ上の理由から従業員によるOpenAI ChatGPTの使用を制限

11月10日、マイクロソフトは人工知能研究企業OpenAIに100億ドル以上を投資したにもかかわらず...

データセキュリティ:アルゴリズムの限界

[[416227]]ビッグデータの時代において、データは人類の生産、生活などに多大な利便性をもたらす...

...

インテリジェントなデザインの4台の馬車が牽引する蘇寧木牛のクリエイティブな共有

[51CTO.comより] 蘇寧木牛は蘇寧人工知能研究開発センターが設計したインテリジェントデザイン...

OpenAI、中小企業向けChatGPTチームサブスクリプションサービスを開始、月額料金は1人あたり30ドル

1 月 11 日、OpenAI は小規模なセルフサービス チーム専用の新しいサブスクリプション プラ...

...

かつては世界トップ50のロボット技術企業の一つだったスターロボット企業がまた一つ倒産した。

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

...

小売業界のトレンド: 人工知能からクーポンコードまで

[[436501]]機械学習と人工知能 (AI) の登場により、企業のビジネスのやり方は大きく変化し...