I einen Satz von A
‚s und einen Satz von B
‘ s, die jeweils mit einem zugeordneten numerischen Priorität, wobei jede A
grundsätzlich einige oder alle B
‚s und umgekehrt, und meine Hauptschleife entsprechen kann, besteht von:Pairwise Prioritätswarteschlange
Nehmen Sie die besten A
und B
in der Reihenfolge der Priorität, und tun Sie Dinge mit A
und B
.
Der offensichtlichste Weg, dies zu tun, ist mit einer einzelnen Prioritätswarteschlange von (A,B)
Paaren, aber wenn es 100.000 A
‚s und 100.000 B
‘ s ist dann die Menge der O(N^2)
Paare nicht in dem Speicher passen (und Scheibe zu langsam).
Eine andere Möglichkeit ist für jede A
, Schleife durch alle B
. Dies bedeutet jedoch, dass die globale Prioritätsbestellung nur A
ist und ich wirklich die Priorität beider Komponenten berücksichtigen muss.
(Die Anwendung ist Theorembeweisen, wo die oben genannten Optionen das Paar Algorithmus und die gegebene Klausel Algorithmus jeweils genannt werden, die Mängel von jedem bekannt sind, aber ich habe keinen Hinweis auf eine gute Lösung gefunden.)
Eine Art von Zwei-Ebenen-Prioritätswarteschlange scheint angezeigt, aber es ist nicht klar, wie dies ohne die Verwendung entweder O(N^2)
Speicher oder O(N^2)
Zeit im schlimmsten Fall zu tun.
Gibt es eine bekannte Methode, dies zu tun?
Erläuterung: jeder A
muss mit allen entsprechenden B
's verarbeitet werden, nicht nur einer.
Was passiert, wenn es ein A ohne entsprechendes B gibt? –
@Jason Punyon Dann gibt es nichts zu tun. – starblue
"Jedes A kann mit einigen oder allen B's übereinstimmen". Ok, aber woher wissen wir, welches B ein bestimmtes A ist? –