間隔ヒープからの最小要素の削除
- インターバルヒープでは、最小の要素はルートノードの左側にある要素です。この要素は削除されて返されます。
- ルートノードの左側に作成された空席を埋めるために、最後のノードの要素が削除され、ルートノードに再度挿入されます。
- 次に、この要素は降順ノードのすべての左側の要素と連続して比較され、インターバルヒープのすべての条件が満たされるとプロセスが終了します。
- ノードの左側の要素がいずれかの段階で右側の要素よりも高くなった場合、2つの要素が交換され、さらに比較が実行されます。
- 最後に、ルートノードの左側に最小の要素が再び含まれます。
この手順は、次の方法でも説明できます-
最小要素の削除は、いくつかの方法で処理されます-
- インターバルヒープが空の場合、removeMin操作は失敗します。
- インターバルヒープに要素が1つしかない場合は、この要素を返す必要があります。要素なしでインターバルヒープを残します。
- 複数の要素がある場合は、ルートの左端点を返す必要があります。この点はルートから削除されます。
- ルートがインターバルヒープの最後のノードを示している場合、これ以上何もする必要はありません。
- 最後のノードがルートノードでない場合、最後のノードから左の点pを削除します。これにより最後のノードが空になると、最後のノードはヒープの一部ではなくなります。
- 最後のノードから削除されたポイントpは、ルートから開始することにより、埋め込まれた最小ヒープに再挿入されます。
- 下に移動すると、p≤rになるように、現在のpを検査対象のノードの右端点rと交換する必要がある場合があります。再挿入は、通常のヒープへの再挿入に使用されるのと同じ戦略を実装して実行されます。
-
データ構造のインターバルヒープ
ここでは、間隔ヒープとは何かを確認します。間隔ヒープは完全な二分木であり、最後のノードを除く各ノードには2つの要素が含まれている可能性があります。ノードPの2つの要素の優先順位を「a」と「b」とします。ここでは、≤bを検討しています。ノードPは閉区間[a、b]を表すと言います。ここで、aはPの区間の左端であり、bは右端です。 [c、d]は、a≤c≤d≤bの場合に限り、区間[a、b]に含まれます。区間ヒープでは、各ノードPの左右の子で表される区間は、Pで表される区間に含まれます。最後のノードに優先度cの単一要素が含まれている場合、a≤c≤bです。ここで、[a、b]は最後のノードの親の間隔です。
-
最小値を持つPythonリストから要素を見つける方法は?
最小値の要素を見つけるには、リストを引数としてmin()関数を呼び出す必要があります。 min関数は、リストを繰り返し処理して、最後に到達するまで検出した最小値を追跡します。次に、この値を返します。 例 my_list = [2, 3, 1, 5, -1] print(min(my_list)) 出力 これにより、出力が得られます- -1 インデックスとmax要素が発生したすべての場所も必要な場合は、enumerateメソッドを使用できます。 enumerateメソッドは、最初のインデックスにインデックスがあり、2番目にオブジェクトがあるオブジェクトのタプルを作成します。 例 my_lis