Java で最大ヒープを使用するには?

Java De Zui Dahipuwo Shi Yongsuruniha



プログラマは、「」を利用することで最大要素を簡単に取得できます。 最大ヒープ ”二分木。このツリーのように、最大​​要素は常にツリーの最上位ノードに存在します。これは「」として知られています。 ”ノード。さらに、並べ替えられた順序を維持しながら、要素の効率的な挿入と削除を実現します。さらに、「最大ヒープ」は、優先度やその他の基準に基づいてスケジュールされたジョブを簡単に実行できます。

この記事では次の内容について説明します。







Java で最大ヒープを使用するには?

最大ヒープ 」は、優先キューを実装するための基礎となるデータ構造として利用されます。優先キューでは、データは割り当てられた優先値に基づいて処理されます。データ要素を効率的に降順に並べ替えるのにも利用できます。



「最大ヒープ」は、以下のコーデック例で説明する 2 つの方法を使用して生成できます。



方法 1: 「maxHeapify()」メソッドを使用する

maxHeapify() ”メソッドは”を生成します 最大ヒープ データ構造を変換することによって、要素の既存のコレクションから「」を取得します。さらに、この方法は、元の配列を適切な場所で変更するのに役立ち、追加のメモリの必要性を軽減します。





たとえば、以下のコードにアクセスして、「 最大ヒープ 「maxHeapify()」メソッドを使用して:

java.util.ArrayListをインポートします。
java.util.Collectionsをインポートします。
java.util.Listをインポートします。

パブリック クラス MaxHeapifyExam {
パブリック静的ボイドメイン ( [ 引数 ) // メインの作成 ( ) 方法
{
リスト < 整数 > testingEle = 新しい ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 3 ) ;
testEle.add ( 8 ) ;
testEle.add ( 2 ) ;
testEle.add ( 1 ) ;
testEle.add ( 7 ) ;
System.out.println ( 「オリジナルリスト:」 + テスト ) ;
maxHeapify ( テスト ) ;
System.out.println ( 「生成される最大ヒープ:」 + テスト ) ;
}

プライベート静的 void maxHeapify ( リスト < 整数 > テスト ) {
int k = testEle.size ( ) ;
ために ( int i = k / 2 - 1 ;私 > = 0 ;私 - ) {
山盛りにする ( テストエレ、k、i ) ;
}
}

プライベート静的ボイドヒープ化 ( リスト < 整数 > テストEle、int k、int i ) {
int より大きい = i;
int leftSide = 2 * 私 + 1 ;
int rightSide = 2 * 私 + 2 ;
もしも ( 左側 < k && testEle.get ( 左側 ) > testEle.get ( より大きな ) ) {
大きい = 左側;
}
もしも ( 右側 < k && testEle.get ( 右側 ) > testEle.get ( より大きな ) ) {
大きい = 右側;
}
もしも ( より大きな = 私 ) {
コレクション.スワップ ( テストEle、i、greater ) ;
山盛りにする ( テストEle、k、大きい ) ;
}
}
}



上記のコードの説明:

  • まずはリスト「 テスト ” は、” 内のダミーデータ要素で初期化されます。 主要() 」メソッドを実行し、コンソールに出力します。
  • 次に、「testEle」リストが「maxHeapify()」関数に渡され、返されたリストがコンソールに表示されます。
  • そうして ' maxHeapify() 」メソッドが初期化され、提供されたリストのサイズが「 サイズ() ' 方法。
  • 次に「」を活用します。 ために 」ループを実行してヒープ構造を設定し、各ノードの位置を計算します。
  • ここで、「」を使用してください。 heapify() 」メソッドを使用し、それぞれ「greater」、「leftSide」、「rightSide」変数に値を代入して、「top」、「left」、「right」ノードの位置を設定します。
  • その後、複数の「」を活用します。 もしも ” 条件ステートメントを使用して、” 左側 「」ノードは「」より大きいです 右側 ” ノードとその逆。最終的には、より大きい値が「」に格納されます。 より大きな ”ノード。
  • 最後に、新しい「 より大きな ” ノードの値は、” に既に格納されている値と照合されます。 より大きな ” ノード変数。そしてその ' スワップ() ” 関数はそれに応じて動作し、” に最大値を設定します。 より大きな ' 変数。

実行フェーズの終了後:

スナップショットは、最大ヒープが「」を使用して生成されたことを示しています。 maxHeapify() Javaの「メソッド」。

方法 2: 「Collections.reverseOrder()」メソッドを使用する

Collections.reverseOrder() ” メソッドは、” を生成するためのシンプルかつ簡潔なメソッドを提供します。 最大ヒープ 」コレクションを逆順に並べ替えます。これにより、コードを再利用できるようになり、カスタムの「 山盛りにする ” ロジック。以下のコード スニペットに示されています。

java.util.ArrayListをインポートします。
java.util.Collectionsをインポートします。
java.util.Listをインポートします。

パブリック クラス ReverseOrderExample {
パブリック静的ボイドメイン ( [ 引数 ) // メインの作成 ( ) 方法
{
リスト < 整数 > testingEle = 新しい ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 38 ) ;
testEle.add ( 98 ) ;
testEle.add ( 26 ) ;
testEle.add ( 1 ) ;
testEle.add ( 73 ) ;
System.out.println ( 「オリジナルリスト:」 + テスト ;
コレクション.ソート ( testEle、Collections.reverseOrder ( ;
System.out.println ( 「生成される最大ヒープ:」 + テスト ;
}
}

上記のコードの説明:

  • まず、「」をインポートします 配列リスト ”、” コレクション ' と ' リスト 」ユーティリティを Java ファイルに追加します。
  • 次に、「」を作成します。 リスト 「」という名前 テスト 」と入力し、リストにダミー要素を挿入します。
  • 次に、「 選別() 」メソッドを利用してデータ要素を昇順に並べ替え、リストをパラメータとして「 Collections.reverseOrder() ' 方法。これにより、「」の並べ替えが行われます。 テスト 」を逆順にリストします。

実行フェーズの終了後:

このスナップショットは、「Max Heap」が生成され、「Collections.reverseOrder()」メソッドを使用して並べ替えられていることを示しています。

結論

「」を作成することで、 最大ヒープ 」では、ユーザーは「maxHeapify()」メソッドと「Collections.reverseOrder()」メソッドを使用できます。これらは、最大の要素への素早いアクセスと並べ替えられた順序の効率的な維持を可能にする方法で要素のコレクションを管理します。それは、特定の要件と、ヒープ作成プロセスに必要な制御レベルによってのみ異なります。