Ein Online-Algorithmus zum Auffinden der Pareto-Grenzelemente

6

Ich suche nach einem Online-Algorithmus, der einen Strom von Elementen aufnimmt und die Elemente an der Pareto-Grenze beibehält (z. B. alle nicht dominierten Elemente).

Zum Beispiel. Angesichts der folgenden Eingaben würde sich der beibehaltene Pareto-Grenzsatz wie folgt entwickeln:

  • (3,7)
    • Element einfügen b / c es ist das erste Element
    • Pareto-Set enthält jetzt {(3,7)}
  • (7,3)
    • Element einfügen b / c es wird im ersten nicht dominiert
    • Pareto-Set enthält jetzt {(3,7), (7,3)}
  • (8,4)
    • Element einfügen b / c es ist nicht dominiert; entfernen, (7,3)was es in beiden Dimensionen dominiert
    • Pareto-Set enthält jetzt {(3,7), (8,4)}
  • (1,1)
    • Nicht einfügen, da es in beiden Dimensionen dominiert
    • Pareto-Set enthält jetzt {(3,7), (8,4)}
  • (9,9)
    • Element einfügen b / c es ist nicht dominiert; Entfernen Sie alle anderen Elemente, da diese in beiden Dimensionen dominieren
    • Pareto-Set enthält jetzt {(9,9)}

In meinem Beispiel verwende ich 2-Tupel, suche aber nach einem Algorithmus, der N-Tupel für "kleine" N verarbeiten kann (z. B. <10).

Die naive Lösung besteht darin, jedes Element mit allen Elementen zu vergleichen, die sich derzeit in der Menge befinden. In der Praxis ist der naive Ansatz möglicherweise nicht so schlecht (z. B. subO(n2)) weil Elemente regelmäßig vom Vergleichssatz ausgeschlossen werden. Aber ich habe mich gefragt, ob es dafür einen bekannten effizienten Algorithmus gibt. Ich interessiere mich für Effizienz im Speicher und für Rechenkomplexität. (Ha! Und tatsächlich suche ich nach einer Reihe von Algorithmen, die hinsichtlich Speicher und Rechenkomplexität paretooptimal sind.)

Meine derzeitige Anwendung besteht darin, ein Lucene - Suchdokument zu erstellen Collector, das nicht die relevantesten Dokumente sammelt (der typische Anwendungsfall für eine Suchmaschine), sondern die Pareto-optimalen Dokumente entlang bestimmter Dimensionen sammelt.

JnBrymn
quelle
1
Interessieren Sie sich für die fortgeführten Anschaffungskosten oder das Maximum der Kosten für jedes Update?
2
Die Pareto-Grenze wird auch Skyline oder Maxima genannt. Probieren Sie also Keywords wie "Online, Skyline / Maxima, Datenstrom, Pflege" mit Google aus.
Hengxin
Dieses Papier hat mehrere Lösungen dl.acm.org/citation.cfm?doid=1142473.1142530

Antworten:

4

In zwei Dimensionen kann jedes Update in durchgeführt werden O(lgn)Zeit unter Verwendung einer ausgeglichenen binären Baumdatenstruktur. Aber wenn Sie in einem hochdimensionalen Raum arbeiten, kenne ich keine effiziente Lösung.

Lassen Sie mich einen effizienten Algorithmus für den 2D-Fall beschreiben. LassenFbezeichnen die Menge der Punkte in der Pareto-Grenze. GeschäftF in einem ausgeglichenen Binärbaum mit dem x-Koordinate jedes Punktes als Schlüssel. Beachten Sie dies beim SortierenF durch Erhöhen x-Koordinate, sie werden auch durch Verringern sortiert y-Koordinate.

Nun ein neuer Punkt gegeben (xq,yq)können Sie effizient überprüfen, ob es von einem Element von Pareto dominiert wird F. Finden Sie das erste Element vonF rechts von (xq,yq) (dh das Element (x,y)F so dass xxq und xist minimal); dann prüfen, ob es dominiert(xq,yq).

Auch einen neuen Punkt gegeben (xq,yq)können Sie effizient feststellen, ob es ein Element von Pareto dominiert F. Insbesondere finden Sie Indizesi,j so dass die Punkte (xi,yi),(xi+1,yi+1),,(xj,yj) von F sind alle Pareto-dominiert von (xq,yq) (unter der Annahme, dass die Punkte von F wurden bestellt von x-koordinierte, pareto-dominierte Punkte werden in einem aufeinanderfolgenden Intervall sein). Hier ist wie. Finden Sie das erste Element vonF auf der linken Seite von (xq,yq) (dh das Element (xj,yj)F so dass xjxq und xj ist so groß wie möglich) und prüfen Sie, ob (xq,yq)dominiert es. Wenn ja, finden Sie den kleinsten Indexi so dass i<j (damit xi<xj) und yiyq. Beide Schritte können in ausgeführt werdenO(lgn)Zeit. (Findeni kann in gemacht werden O(lgn) Zeit, indem der Baum als Verzweigung auf dem Baum behandelt wird y-Koordinate von Punkten, und ausnutzen der Tatsache, dass die Punkte von F werden nach abnehmend sortiert y-Koordinate.)

Nun sagen wir uns, was wir tun sollen. Wenn(xq,yq) wird von einem Punkt von dominiert F, dann füge es nicht hinzu F;; du bist fertig. Alternativ, wenn(xq,yq) Punkte dominieren i..j von F, dann müssen Sie diese Punkte aus löschen F und hinzufügen (xq,yq) in F. Dies kann in erfolgenO(lgn) Zeit, indem festgestellt wird, dass jedes Intervall aufeinanderfolgender Indizes als Vereinigung von ausgedrückt werden kann O(lgn) Teilbäume des Binärbaums (grob gesagt arbeiten Sie mit den Geschwistern der Knoten entlang des Pfades von i zur Wurzel, und das gleiche für den Weg von jzur Wurzel); Sie können jeden Teilbaum in löschenO(1)Zeit. Auf diese Weise können wir eine ganze Reihe aufeinanderfolgender Punkte in löschenF im O(lgn)Zeit, egal wie groß die Reichweite ist. Weitere Informationen finden Sie unter Löschen eines aufeinanderfolgenden Blattbereichs aus einem Binärbaum .

All dies kann in getan werden O(lgn) Zeit unter Verwendung einer ausgeglichenen binären Baumdatenstruktur.

Dies funktioniert in 2 Dimensionen (dh 2-Tupel). In höheren Dimensionen wird das Problem viel schwieriger. Verweise auf die Literatur mit Techniken für höhere Dimensionen finden Sie unter So finden Sie eine Teilmenge potenziell maximaler Vektoren (von Zahlen) in einer Menge von Vektoren ; Ich befürchte jedoch, dass in hohen Dimensionen alle bekannten Algorithmen wahrscheinlich ziemlich langsam sind (sie haben einen ähnlichen Faktor)O((lgn)d1) wo d ist die Anzahl der Dimensionen).

DW
quelle
1
Erlauben ausgeglichene Binärbäume O (log (n)) - Zeitlöschungen von Bereichen ?
1
Das ist eine gute Antwort. Es macht mich jedoch darauf aufmerksam, dass ich mit meinem Beispiel eine Einschränkung impliziert habe, die ich nicht beabsichtigt hatte. In meinem Beispiel verwende ich 2-Tupel, aber ich würde einen Algorithmus benötigen, der N-Tupel verarbeitet.
JnBrymn
1
@JnBrymn, siehe meine aktualisierte Antwort: Ich habe am Ende einen Absatz hinzugefügt, um die Situation in höheren Dimensionen anzugehen.
DW
Siehe "Alle anderen Elemente entfernen, da dies sie in beiden Dimensionen dominiert". (Es kann leicht ein lineare Anzahl Elemente werden entfernt werden, so dass , wenn Sie zu tun haben, dass ein Element in einer Zeit, dann kann Updates nehmen Worst-Case - O (n) Zeit.)
Wie werden nun in zwei Dimensionen streng dominierte Elemente in der Zeit O (log (n)) entfernt?