ヒープは通常、(完全な) ツリーとして表示できるオブジェクトの配列です。そして、以下のルールは常に満たされます。 ヒープは完全な二分木である ノードは常にその子ノードよりも大きくなります (または小さくなります)。 したがって、2 番目の特性に従って、バイナリ ヒープは最大ヒープ (または最大ヒープ) と最小ヒープ (または最小ヒープ) に分割されます。 上の図では、1 2 は大きなトップヒープ、3 4 は小さなトップヒープです。ヒープかどうかを判断する条件: 「ルート ノードから任意のノードまでのパス上のノード シーケンスの順序です。シーケンスが順序どおりか逆順かは、max-heap と min-heap によって決まります。」 Python は「ヒープ」データ型を提供しておらず、リストを直接ヒープとして扱います。 Pythonが提供するheapqパッケージは、ヒープ操作を実行するためのツール機能を提供するいくつかの関数を提供します。
ヒープソート ヒープ内に要素を挿入した後、その要素が再びヒープの特性を満たすように調整する必要があります。このプロセスは、ヒープ化と呼ばれます。 では、ヒープソートの基本的な考え方は何でしょうか?
次に例を示します (リソースは Wang Zheng のアルゴリズムから取得)。たとえば、上記の最大ヒープにデータ 22 を追加します。 ヒープ化は非常に簡単で、ノードがあるパスを上または下に移動し、比較して交換するだけです。 ヒープソートの削除操作は、通常、ヒープの最上位要素を参照します。ヒープの最上位要素を削除した後、2 番目に大きい要素をヒープの最上位に配置する必要があります。すると、2 番目に大きい要素が必ず左と右の子ノードに表示されます。 次に、2 番目に大きいノードを繰り返し削除し、リーフ ノードが削除されるまでこれを繰り返します。しかし、これによりアレイ ホールの問題が発生します。 したがって、ここでもう 1 つのトリックがあります。つまり、ヒープの最上位要素を削除するときに、直接削除することはできません。ヒープの最上位要素を最後の要素と交換し、条件が満たされるまでヒープの特性に応じてヒープを調整する必要があります。 ソート処理では、ソートするシーケンスの長さから毎回 1 を減算し、次にこれら 2 つの手順を実行します。 以下は、Python の heapq モジュールを使用して実装されたヒープソートの簡単なコードです。
heapq モジュールを使用しない場合は、プッシュ ソートのヒープ ソートにおけるヒープ構築プロセスを理解する必要があります。 配列をその場でヒープに構築します。別の配列を使用せずに元の配列を操作します。ヒープを構築するには 2 つの方法があります。 ヒープ構築の最初の方法は、配列データを前から後ろへ処理し、各データがヒープ内に挿入されるときに下から上に積み重ねられることです。 2 番目の実装アイデアは、配列を後ろから前に処理し、各データを上から下に積み重ねることです。
つまり、ノードの添字が i の場合、左の子ノードの添字は 2∗i+1、右の子ノードの添字は 2∗i+2、親ノードの添字は となります。
ヒープソートは、ソート処理中にヒープの最後のノードとヒープの最上位ノードを交換する操作があるため、同じ値を持つデータの元の相対順序が変更される可能性があるため、安定したソートアルゴリズムではありません。ヒープソートの全体的な時間計算量は O(nlogn) です。 参考資料 https://github.com/MaoliRUNsen/runsenlearnpy100 |
<<: 2021年、民間ドローン分野では5つの大きなトレンドが見られる
>>: アルゴリズム: Javascript をエレガントに使用して構造ツリーを再帰的に描画する方法
2019年もすでに半分が過ぎました。今年上半期のテクノロジー業界の目覚ましい成果は何でしょうか?今日...
Star NLP 社からの速報: 6 か月間の業務および生産停止。最近配布されたスクリーンショット...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
要点: 1. 自動車会社が独自の自動運転システムを開発することがトレンドとなっている。 2. MBD...
Google は一連の人工知能ツールをリリースしました。これらすべての新しいツールとサービスの核と...
機械学習とディープラーニングは人工知能の分野に属しますが、両者の間には大きな違いがあります。これら ...
この論文で紹介されている特徴伝播は、グラフ機械学習アプリケーションで欠落している特徴を処理するた...
「人工知能のゴッドファーザー」として知られるジェフリー・ヒントン教授は、英国王立協会 (FRS) ...
人間にとって、文章は階層的です。文の階層構造は表現と理解の両方にとって非常に重要です。しかし、自然言...
[[331789]]序文従来のデータの公開と共有の方法の多くは、生のデータをプレーンテキストで直接出...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...