Angesichts einer Liste von Saiten, finden Sie alle Paare (x, y) $, in der $ x $ eine Ansprüche von $ y $ ist.Möglich, besser als $ o (n ^ 2) $ zu tun?
-
29-09-2020 - |
Frage
Betrachten Sie das folgende algorithmische Problem: Angesichts einer Liste der Saiten $ l= [S_1, S_2, \ DOTS, S_N] $ , möchten wir alle Paare kennen < Span-Klasse="Math-Container"> $ (x, y) $ Wobei $ x $ eine andere
Ein trivialer Algorithmus wäre dies:
generasacodicetagpre.Dies hat jedoch die Komplexität $ O (n ^ 2 \ cdot m) $ - Ich bin neugierig, ob es einen schnelleren Algorithmus gibt (schneller Anzahl der Paare $ (x, y) $ ist viel kleiner als $ n $ , so dass zum Beispiel ein Algorithmus mit Komplexität in Abhängigkeit von der Anzahl der Ausgangspaare).
Note Hinweis -X-IS-A-Substring-of-Y "> Diese Frage , das ungefähr das gleiche Problem ist, aber für Teilzeichenfolgen (keine Ansprüche). Dort löste der Aho-CoraSick-Algorithmus mein Problem perfekt - gibt es vielleicht so etwas, aber für die Ansprüche?
Lösung
Nein, es ist nicht möglich, besser zu sein, es sei denn, die starken exponentiellen Zeithypothese (Seth) schlägt nicht. Wenn wir dieses Problem wesentlich schneller lösen könnten als
siehe, zB diese Vorlesungsnotizen unter § 3 " Untere Grenzen für orthogonale Vektoren ". Der Beweis ist analog zum Nachweis der Theorem 2 in diesen Vortragshinweisen.
Erstens berücksichtigen wir das allgemeinere Problem, dass zwei Sätze von Saiten $ x, y $ und findet, ob ein gewisser Zeichenfolge in $ X $ ist eine Ansprüche einer Zeichenfolge in $ y $ .
Angesichts einer SAT-Formel teilen wir den
Wenn dieses Problem wesentlich schneller gelöst werden kann als
In Ihrem Problem gibt es nur einen einzigen Set von Saiten, der alle eine Ansprüche voneinander sein können. Dies ist jedoch kein Problem, da wir die Saiten einfach in unserem Fall ändern können, so dass keine Zeichenfolge $ y $ eine andere andere Zeichenfolge ist (zum Beispiel durch Polsterung Alle Saiten in $ y $ , um dieselbe Länge zu haben), und in ähnlicher Weise jede Zeichenfolge in $ x $ auf die gleiche Länge wie andere Saiten in $ x $ (aber wesentlich kürzer als Zeichenfolgen in $ y $ ) .
Dies kann wahrscheinlich auch mit einem konstanten (wahrscheinlich auch binären) Alphabet erfolgen, dies erfordert jedoch mehr clevere Kodierungen.