Ich habe das Gefühl, dass es eine Lösung in den folgenden Zeilen geben könnte, aber das ist keineswegs eine vollständige Lösung.
Sei S eine Teilmenge von Vertices. Für jeden Vertex V im Graph betrachte man die Menge D_S (V), die ich wie folgt definiere: D_S (V) = {V} wenn V in S, und ansonsten ist D_S (V) die Vereinigung von {V} mit die Mengen D_S (W) für alle direkten Nachkommen W von V. (Das heißt, es sind "alle möglichen Nachkommen von V, aber höre die Rekursion auf, wenn du ein Element von V triffst.") Die Frage ist: Können wir eine Menge finden? S so, dass die Größe von S O (f (N)) ist und auch D_S (V) die Größe O (g (N)) für alle V hat, und wobei f und g asymptotisch sublinear sind? (Vielleicht können wir zum Beispiel sqrt für beide erreichen.)
Wenn wir das finden können, schlage ich die folgende Strategie vor. Für die Vorverarbeitung erstellen Sie für jedes U in S eine Hash-Tabelle, die alle Knoten enthält, die schließlich von U erreichbar sind. Dies kann in O (f (N) * M) erreicht werden; das ist nicht unbedingt besser als O (N^2), aber mindestens besser als O (M * Q).
Jetzt, um eine Abfrage zu beantworten "ist U erreichbar von V?", Das ist trivial wenn V in S. Andernfalls überprüfen wir, ob V = U, in diesem Fall ist es auch trivial. Schließlich wenden wir den gleichen Prozess rekursiv auf alle Nachkommen von V an und geben "ja" zurück, wenn die Antwort in beiden Fällen "ja" ist, aber "nein" nur, wenn wir niemals U finden. Diese Rekursion dauert bis O (g (N)) Schritte.
Die Frage, die bleibt, ist, wie man S auswählt. Ich denke, wenn der Graph aus einem Prozess entsteht, in dem der Out-Grad einem Potenzgesetz folgt, könnte man einfach die sqrt (N) Eckpunkte mit den höchsten Out-Grades nehmen.Aber zum Beispiel, wenn wir den Graphen auf N = 2 * K Ecken (i, 0) und (i, 1) haben, mit K^2 Kanten: von jedem (i, 0) zu jedem (j, 1); dann gibt es keine geeignete Teilmenge S. Aber vielleicht haben Graphen, die kein geeignetes S haben, notwendigerweise einen Grad an Einheitlichkeit, den wir ausnutzen können ... oder vielleicht auch nicht. Ich weiß es nicht. Irgendwelche Ideen, lass es mich wissen!
Sogar in einer DAG könnte es 'O (n^2)' Kanten geben, (außer es wird angegeben, dass die Grafik gespart ist), also suchen Sie nach sublinearer Zeit, eigentlich ... Und 'Diese Frage kann aus dem gleichen Grund leicht in O (n) 'Nö gelöst werden. – amit
Mein schlechtes. Ich meinte O (n + m). – Badf
Sind die Abfragen offline beantwortbar? –