ヒープは通常、(完全な) ツリーとして表示できるオブジェクトの配列です。そして、以下のルールは常に満たされます。 ヒープは完全な二分木である ノードは常にその子ノードよりも大きくなります (または小さくなります)。 したがって、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 をエレガントに使用して構造ツリーを再帰的に描画する方法
EU があらゆる業界での AI および機械学習技術の使用を効果的に規制する AI 法の施行に向けて...
ChatGPT は、翻訳、作詞作曲、リサーチ、コーディングなど、さまざまなスキルに優れています。しか...
背景メディア伝送における一般的な帯域幅推定アルゴリズムには、GCC/BBR/PCC/QUBIC など...
海外メディアの報道によると、イタリアの研究者らは最近、量子コンピュータ上で特殊なアルゴリズムを実行す...
今後8年間の8つの重要なトレンドを予測[[322666]] UnsplashのHarpal Sing...
1. 機械学習プラットフォームとビッグデータプラットフォームの関係の明確化[[346643]]機械...
[[207297]] LTR のエントリーレベルのモデルは線形モデルです。この記事では線形モデルを例...
AI チャットボットは、自然言語処理と機械学習を使用してユーザーとの人間の会話をシミュレートするソフ...
4月6日から10日まで、李開復博士は母校であるカーネギーメロン大学の有名なポーカーロボットLibr...
今日の物語の主人公は、サンジーヴ・アローラとアニルド・ゴヤルという二人の科学者です。アローラ氏はプリ...
[[333000]]序文Baidu 百科事典で「機械学習」を検索すると、私が決して到達できないレベル...