パレートフロンティア要素を見つけるオンラインアルゴリズム


6

要素のストリームを取得し、パレートフロンティアにある要素(たとえば、すべての非支配要素)を保持するオンラインアルゴリズムを探しています。

例えば。以下の入力が与えられると、保持されているパレートフロンティアセットは次のように進化します。

  • (3,7)
    • 要素b / cを挿入します最初の要素です
    • パレートセットに含まれるもの {(3,7)}
  • (7,3)
    • 最初に支配されていない要素b / cを挿入します
    • パレートセットに含まれるもの {(3,7), (7,3)}
  • (8,4)
    • 支配されていない要素b / cを挿入します。(7,3)両方の次元で支配されているものを削除する
    • パレートセットに含まれるもの {(3,7), (8,4)}
  • (1,1)
    • 両方の次元で支配的であるため、挿入しないでください
    • パレートセットに含まれるもの {(3,7), (8,4)}
  • (9,9)
    • 支配されていない要素b / cを挿入します。他のすべての要素を削除します。これは、両方の次元でそれらを支配するためです
    • パレートセットに含まれるもの {(9,9)}

私の例では2タプルを使用していますが、「小さい」N(たとえば、<10)のNタプルを処理できるアルゴリズムを探しています。

素朴な解決策は、各要素を現在セット内のすべての要素と比較することです。実際には、素朴なアプローチはそれほど悪くないかもしれません(例えば、サブO(n2))要素は比較セットによって定期的に排除されるためです。しかし、このための効率的なアルゴリズムが知られているかどうか疑問に思っていました。メモリの効率と計算の複雑さに興味があります。(ハ!そして実際のところ、メモリと計算の複雑さに関してパレート最適であるアルゴリズムのセットを探しています。)

これの私の現在のアプリケーションは、最も関連性の高いドキュメント(検索エンジンの一般的な使用例)を収集しないが、指定された次元に沿ってパレート最適ドキュメントを収集するLucene検索ドキュメントの構築Collectorです。


1
償却コストまたは各更新のコストの最大値に興味がありますか?

2
パレートフロンティアは、スカイラインまたはマキシマとも呼ばれます。それで、グーグルで「オンライン、スカイライン/マキシマ、データストリーム、維持」のようなキーワードを試してください。
hengxin 2016年

このペーパーにはいくつかのソリューションがありますdl.acm.org/citation.cfm?doid=1142473.1142530

回答:


4

2つの次元では、各更新は O(lgn)時間、バランスのとれたバイナリツリーデータ構造を使用します。しかし、あなたが高次元の空間で作業しているとき、私は効率的な解決策を知りません。

2Dの場合の効率的なアルゴリズムについて説明します。しましょうFパレートフロンティアのポイントのセットを示します。お店F バランスのとれた二分木で、 x-キーとしての各ポイントの座標。並べ替えると、F 増やすことによって x-座標、それらはまた、降順でソートされます y-座標。

今、新しいポイントを与えられて (xq,yq)、の要素によってパレート支配されているかどうかを効率的に確認できます F。の最初の要素を見つけるF の右に (xq,yq) (つまり、要素 (x,y)F そのような xxq そして x最小限です); それが支配的かどうかを確認します(xq,yq)

また、新しいポイントが与えられた (xq,yq)、あなたはそれがパレート支配の要素を効率的に見つけることができます F。特に、インデックスを見つけることができますi,j そのような点 (xi,yi),(xi+1,yi+1),,(xj,yj)F すべてパレート支配です (xq,yq) (のポイントが F によって注文されました x-座標、パレート支配のポイントは連続した間隔になります)。方法は次のとおりです。の最初の要素を見つけるF の左側 (xq,yq) (つまり、要素 (xj,yj)F そのような xjxq そして xj ができるだけ大きい)、そして (xq,yq)それを支配します。はいの場合、最小のインデックスを見つけますi そのような i<j (そう xi<xj)および yiyq。これらのステップは両方で行うことができますO(lgn)時間。(検索i で行うことができます O(lgn) 木の枝として扱うことによって時間 y-ポイントの座標、およびポイントの事実を利用して F 降順に並べ替え y-座標。)

これで何をすべきかがわかります。もし(xq,yq) のいくつかの点によって支配されています F、次に追加しないでください F; あなたは終わった。または、(xq,yq) ポイントを支配する i..jF、それらのポイントをから削除する必要があります F そして追加 (xq,yq)F。これはO(lgn) 時間、連続するインデックスの任意の間隔は、 O(lgn) 二分木のサブツリー(大まかに言えば、からのパスに沿ってノードの兄弟で作業します i ルートへ、そしてからのパスについても同じ jルートへ); 各サブツリーを削除できますO(1)時間。これにより、連続するポイントの範囲全体を削除できますFO(lgn)時間、範囲がどんなに大きくても。詳細については、「バイナリツリーから一連のリーフ削除する」を参照してください。

これはすべてで行うことができます O(lgn) 時間、平衡二分木データ構造を使用。

これは2次元(つまり、2タプル)で機能します。より高い次元では、問題ははるかに困難になります。一連のベクトル内で(数値の)潜在的に最大のベクトルのサブセットを見つける方法で、より高次元の手法を使用して、文献への参照を見つけることができます。。しかし、私は恐らく、高次元では、すべての既知のアルゴリズムがかなり遅い可能性が高いです(それらは次のような要素を持っています)O((lgn)d1) どこ d は次元数です)。


1
平衡二分木はO(log(n))時間の範囲の削除?

1
これは良い答えです。私が意図していなかった私の例で制約を暗示したことは私の注意を喚起しますが。私の例では2タプルを使用していますが、Nタプルを処理するアルゴリズムが必要です。
JnBrymn 2016年

1
@JnBrymn、私の最新の回答を参照してください:より高い次元での状況に対処するために最後に段落を追加しました。
DW

「これが両方の次元でそれらを支配するので、他のすべての要素を削除します」を参照してください。(。簡単に一度に1つの要素を行う必要がありそうならば、その後の更新は、最悪の場合O(n)の時間がかかることがあり、削除するリニア数の要素がある場合もあります)

2つの次元で、O(log(n))時間で厳密に支配された要素がどのように削除されるのですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.