私が Web で見たほとんどの例では、ランダムな (異なる!) 優先順位を生成するある種の外部乱数ジェネレーターがあると見なされています。
私が覚えていることから、優先順位を実際にランダムに生成し、それらをトレプに挿入して、可能な優先順位の衝突を解き放つ方法がありました。
では、2 つの質問があります。
- Treap は実際にすべての優先度を個別に持つ必要がありますか、それとも最終的に比較される可能性のあるノードの優先度のみを持つ必要がありますか? つまり、優先度のある 2 つのノードがあり、
p
それらが決して接触しないことを確認できる場合、それらに同じ優先度を持たせることに問題はありますか? - Treap で優先順位を生成および解除するにはどうすればよいですか?
ありがとう
編集:これが私が話していることの説明です:
問題 8.12 @ランダム化されたアルゴリズム
次に、treap の操作を実装するために必要なランダム ビットの数を分析してみましょう。単位間隔 [0,1] から各優先度 Pi を一様にランダムに選択するとします。次に、各 Pi のバイナリ表現は、偏りのないコイン投げの結果である (潜在的に無限の) ビット シーケンスとして生成できます。アイデアは、異なる優先度間の比較を解決するために必要な数のビットのみをこのシーケンスで生成することです。ツリー T 内の要素の優先順位のバイナリ表現のプレフィックスをいくつか生成しただけだとします。ここで、項目 y を挿入しながら、その優先順位 Py を他の優先順位と比較して、y をどのようにローテーションするかを決定します。PyをいくつかのPIと比較しながら。現在の部分バイナリ表現で比較を解決できる場合は、完了です。さもないと。それらは同じ部分バイナリ表現を持ち、最初に異なるまで、それぞれに対してより多くのビットを生成し続けます。