6
infimaで部分的に順序付けられた優先度の優先度キュー
複合型であり、部分的にのみ順序付けられている優先順位を持つオブジェクトがいくつかあります。この優先度の順にオブジェクトを選択する必要があります(つまり、毎回最小限のアイテムを生成します)。しかし、注文を勝手に完了するのではなく、キューが安定している場合は、最小要素が複数ある場合に最も古い要素を最初に返す必要があるという意味でキューの方が好ましいと思います。 半順序で機能するヒープデータ構造はありますか?または、それを使用するための通常の優先度キューの変更?私が必要とするアルゴリズムの一般的な選択は、単純なバイナリまたは4進数のヒープですが、それは半順序では機能しません。 優先度の値は次をサポートします。 操作usingを使用した順序付け≼≼\preccurlyeq。それがいる可能性がありますので、それは、半順序だ≼ bが偽とあるB ≼もfalseです。私は書く⋚ ̸ Bその場合に。a≼ba≼ba \preccurlyeq bb≼ab≼ab \preccurlyeq aa⋚̸ba⋚̸ba \not\lesseqgtr b inf(xi)inf(xi)\inf(x_i)yyyy≼xiy≼xiy \preccurlyeq x_innnO(n)O(n)O(n) 半順序の線形拡張を定義できます。アルゴリズムがそのように機能するため、優先キューに使用するのは簡単な方法です。ただし、順序はパフォーマンスに影響し、挿入の順序は最悪の場合を回避するのに最適であるように見えます。 さらに、これで使用したいアルゴリズムは、キュー内のすべての優先順位の下限を知る必要があります。 優先順位には実際の意味がありますが、変更される可能性があるため、他のプロパティに依存することは現実的ではありません。 注:バイナリヒープは半順序では機能しません。aaa、bbb、およびcのバイナリヒープを想定しますccc。ここでa≼ca≼ca \preccurlyeq cおよびa⋚̸ba⋚̸ba \not\lesseqgtr bおよびa⋚̸ca⋚̸ca \not\lesseqgtr cです。それらはこの順序で配置されているため、 a (0) / \ b (1) c (2) ここでdが挿入されます。次の空き位置は3で、bの左の子なbbbので、次のようになります a (0) / \ b (1) c (2) / d (3) 場合は(暗示た推移から、しかし、については何も言うことはありませんと)と、そしてと交換されませんそれはあまりありませんので、。しかし、実際には未満です、それと比較されていないため、現在、主要なヒープ不変式は保持されていません。topは最小限ではありません。d≼ad≼ad \preccurlyeq ad≼cd≼cd …