Verallgemeinerungen der binären Suche nach Posets?

28

Angenommen, ich habe einen Satz "S" und ein monotonisches Prädikat "P" auf S. Ich möchte ein oder alle maximalen Elemente von S finden, die P erfüllen.

EDIT : Ich bin daran interessiert, die Anzahl der Bewertungen von P zu minimieren .

Welche Algorithmen gibt es für dieses Problem und welche Eigenschaften und zusätzlichen Operationen benötigen sie für S?

Was ist mit wichtigen Sonderfällen wie:

  • S ist eine lineare Reihenfolge - dann funktioniert die reguläre binäre Suche, solange Sie eine "mittlere finden" -Operation haben
  • S ist ein Gitter
  • S ist ein Teilmengengitter
  • S ist ein Multiset-Gitter
  • ...

Die beiden letzteren Fälle scheinen besonders wichtig zu sein, z. B. für die Versuchsplanung. Sie haben eine Reihe von booleschen oder reellen Parametern und möchten die kleinstmögliche Kombination finden, die ein bestimmtes Muster reproduziert (z. B. einen nicht bestandenen Test).

jkff
quelle
1
Was ist das "Multiset" -Gitter?
Suresh Venkat
1
Es ist das Gitter, dessen Elemente Zuordnungen X -> N sind, meet ist elementweise min und join ist elementweise max. Es kann auf ein beliebiges Gitter anstelle von N als Codomäne verallgemeinert werden.
jkff

Antworten:

15

Ich habe das nicht sehr durchdacht, bitte korrigieren Sie mich, wenn ich falsch liege.

w

  1. wwlognP

  2. wPPO(wlogn)


O(n)2[n]P{X:P(X)=1}

P()

P({n})

2[n1]n

{X:nX}2[n1]2[n1]P(Y)P(X)X=Y{n}

P2nn+1

Sasho Nikolov
quelle
Wow, so eine einfache Idee! Danke - ich werde mir Gedanken darüber machen, ob dies optimal erscheint oder nicht :)
jkff
Es ist sogar noch weniger als w log n, da die Summe der Kettenlängen n ist. Ich denke, das Maximum liegt bei w log (n / w).
jkff
OK, für lineare Ordnungen ergibt dies eine binäre Suche, für ein Teilmengengitter ergibt dies C (n, n / 2) log (2 ^ n / C (n, n / 2)) ~ exp (n) * n. Nicht zu schnell, aber auch nicht zu suboptimal, da es tatsächlich so viele Antworten geben kann. Um jedoch eine maximale Teilmenge zu finden , müssen Sie über nur eine Kette binär suchen - das ist großartig und ich nenne mich jetzt dumm , wenn ich nicht daran denke. Danke noch einmal!
jkff
2
ww+lognΩ(w)w+logn
1
@YanKingYin Ein Gitter kann nicht die Vereinigung von (mehr als einer) disjunkten Kette sein, da jedes der beiden Elemente ein Supremum haben muss. Ein Poset ist eine Vereinigung nicht zusammenhängender Ketten, wenn es so unterteilt werden kann, dass Elemente aus verschiedenen Teilen nicht vergleichbar sind und Elemente innerhalb desselben Teils eine Gesamtreihenfolge zulassen.
Sasho Nikolov
8

nwO(wn)

Es wäre auch interessant, effiziente statische und dynamische Datenstrukturen zu finden, die für Teilaufträge dieselbe Rolle spielen wie Heaps und binäre Suchbäume für Gesamtaufträge.

Suresh Venkat
quelle
Heh, hört sich im Vergleich zu log (n) nicht zu inspirierend an :) aber trotzdem danke!
jkff
Aber das ist der Punkt. Ohne Datenstrukturen können Sie nicht einmal für einen vollständig bestellten Satz log n erhalten, da Sie nur scannen können. Es ist eigentlich eine sehr schöne Frage, ein BST-Äquivalent zu finden.
Suresh Venkat
Nun - ich spreche von der Komplexität in Bezug auf die Anzahl der Auswertungen des Prädikats P, nicht des Vergleichsprädikats.
jkff
1
In gewissem Sinne ja, aber das ist noch lange nicht die vollständige Antwort - z. B. gibt es keine Zweiteilung für die Fälle 1d oder 2d :) Was schlagen Sie mit den Wurzeln vor?
jkff
1
Noch nicht sicher. laut denken. Aber es ist eine ausgezeichnete Frage.
Suresh Venkat
4

x<y

Außerdem gibt es möglicherweise viele Maximalelemente, die P erfüllen, so dass selbst die Ausgabe aller Elemente viel Zeit in Anspruch nimmt. Ich denke, es gibt nur die Hoffnung, ein Maximum zu finden.

Im Allgemeinen funktioniert die binäre Suche, wenn Sie Elemente rekursiv so auswählen können, dass nach dem Verlassen entweder die obigen Elemente oder die obigen Elemente gelöscht werden und in jedem dieser Sätze ein festes Verhältnis der Elemente gelöscht wird.

Z.B. Wenn S ein festes dimensionales Gitter ist, gibt es einen schnellen Algorithmus: Halbieren Sie immer eine Koordinate, während Sie die anderen minimal halten. Fragen Sie also z. B. im ersten Schritt (n / 2,0, ..., 0).

nd

domotorp
quelle
Ich fürchte, ich verstehe den ersten Absatz nicht. Haben Sie in Ihrer Reduktion alle n-Bit-Zeichenfolgen im Poset S und werden sie als Teil der Eingabe angegeben? Wenn ja, können wir alle Zeichenketten in Polynomialzeit durchgehen.
Yoshio Okamoto
1
@YoshioOkamoto: Ich denke, dass die Annahme in diesem Absatz ist, dass der Vergleich in S als boolesche Schaltung gegeben ist. (Aber das hat nichts mit der Suche in einem Poset zu tun und ist daher für mich nicht interessant.)
Tsuyoshi Ito
@ Tsuyoshi: Vielen Dank. Das macht sehr viel Sinn.
Yoshio Okamoto
4

P2[n]nPP

a3nm
quelle