ヒープは通常、(完全な) ツリーとして表示できるオブジェクトの配列です。そして、以下のルールは常に満たされます。 ヒープは完全な二分木である ノードは常にその子ノードよりも大きくなります (または小さくなります)。 したがって、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 をエレガントに使用して構造ツリーを再帰的に描画する方法
機械学習開発者にとってアプリを構築するのはどれくらい難しいのでしょうか?実際、Python コードを...
アクセス制御業界における顔認識の需要の高まりに応えて、このコンセプトをより高い技術レベルで拡張する新...
この記事では、TensorFlow、CNTK、MXNet、Theano など、Keras でサポート...
最近、カナダのバンクーバーで NeurIPS 2019 が開催されました。テンセントAIラボからは合...
[[433515]]自動運転のテストは非常に複雑なシステムです。この記事では、小さなものから大きなも...
[[210898]]なぜ人々が人工知能にこれほど魅了されるのか分からないなら、69歳のGoogle研...
半導体メーカーのインテルは本日第3四半期の業績を発表し、同社の株価は時間外取引で約8%上昇した。一方...
1. 機械学習をスキルとして扱うソフトウェア エンジニアとして、私たちは常に学習し、進化するフレーム...
[[328414]]マイクロソフトは、マイクロソフトニュースとMSNチームから数十人のジャーナリスト...
人工知能の誕生により、モバイル アプリケーションに大きな可能性をもたらすまったく新しい時代が到来しま...
再帰は、プログラミングの本で説明するのが最も難しい部分である魔法のアルゴリズムです。これらの本では通...
[[360189]]今年、ほとんどの企業は、新型コロナウイルス感染症による混乱に対処し、リモートワー...