要素のストリームを取得し、パレートフロンティアにある要素(たとえば、すべての非支配要素)を保持するオンラインアルゴリズムを探しています。
例えば。以下の入力が与えられると、保持されているパレートフロンティアセットは次のように進化します。
(3,7)
- 要素b / cを挿入します最初の要素です
- パレートセットに含まれるもの
{(3,7)}
(7,3)
- 最初に支配されていない要素b / cを挿入します
- パレートセットに含まれるもの
{(3,7), (7,3)}
(8,4)
- 支配されていない要素b / cを挿入します。
(7,3)
両方の次元で支配されているものを削除する - パレートセットに含まれるもの
{(3,7), (8,4)}
- 支配されていない要素b / cを挿入します。
(1,1)
- 両方の次元で支配的であるため、挿入しないでください
- パレートセットに含まれるもの
{(3,7), (8,4)}
(9,9)
- 支配されていない要素b / cを挿入します。他のすべての要素を削除します。これは、両方の次元でそれらを支配するためです
- パレートセットに含まれるもの
{(9,9)}
私の例では2タプルを使用していますが、「小さい」N(たとえば、<10)のNタプルを処理できるアルゴリズムを探しています。
素朴な解決策は、各要素を現在セット内のすべての要素と比較することです。実際には、素朴なアプローチはそれほど悪くないかもしれません(例えば、サブ)要素は比較セットによって定期的に排除されるためです。しかし、このための効率的なアルゴリズムが知られているかどうか疑問に思っていました。メモリの効率と計算の複雑さに興味があります。(ハ!そして実際のところ、メモリと計算の複雑さに関してパレート最適であるアルゴリズムのセットを探しています。)
これの私の現在のアプリケーションは、最も関連性の高いドキュメント(検索エンジンの一般的な使用例)を収集しないが、指定された次元に沿ってパレート最適ドキュメントを収集するLucene検索ドキュメントの構築Collector
です。