Erreichbarkeitsabfragen für einen Baum in -Zeit mit -Zeitvorverarbeitung


7

Ich bekomme einen ungerichteten Baum im üblichen graphentheoretischen Sinne. Wenn ein Scheitelpunkt und eine Kante , die auf einfallen, muss ich Fragen der Form beantworten, die jedes Blatt von , das von aus erreichbar ist, mit einem Pfad, der , und keine anderen Kanten ? Informeller ist die Einschränkung, dass wir, wenn die Kante gegeben ist, nur in diese Richtung gehen können.Tv(v,u)vTv(u,v)v

Ich kann einfach eine DFS durchführen und ein gefundenes Blatt zurückgeben. Ich denke, dies würde Zeit dauern , wobei der Durchmesser von . Ich möchte jedoch eine Anfrage in Zeit beantworten . Außerdem möchte ich nur eine lineare Vorverarbeitungszeit zulassen. Meine Idee, dies zu erreichen, bestand darin, eine DFS zu verwenden, Blätter zu beschriften und dann Kanten zu beschriften, wenn die Suche zurückverfolgt wird. Diese Idee könnte mit zusätzlichem Aufwand funktionieren, aber ich bin mir über die Details nicht sicher.O(d)dTO(1)

"Graph Erreichbarkeit" ergab einige Ergebnisse, aber vielleicht haben sie es mit komplexeren Problemen zu tun. Ich bin mit jeder Methode zufrieden, die die Vorverarbeitungszeit von und die Fragen in der Zeit von beantwortet .O(n+m)O(1)


Ist dies eine Hausaufgabenfrage oder haben Sie eine Anwendung, bei der Sie diese Grenzen benötigen? Mein Bauch sagt, dass es unmöglich ist, aber wenn Sie als Hausaufgabe gefragt wurden, gibt es vermutlich eine Lösung.
jmite

Wenn nichts anderes, denke ich, dass Ihre Vorverarbeitung wahrscheinlich dauern wird O(mn) Zeit, da zu bekommen O(1)Bei Abfragen benötigen Sie eine Tabelle mit einem Eintrag für jedes Knoten-Kanten-Paar. (Dies kann durch die Initialisierung Ihrer Tabelle auf alle Wahr oder alle Falsch entstehen, selbst wenn Sie die Werte danach schnell eingeben können.) Können Sie mehr Details zu Ihrer DFS-Idee geben? Womit beschriften Sie Ihre Blätter und Kanten?
Jmite

1
@jmite Es gibt 2mKnoten-Kanten-Paare, da die Kante auf den Knoten fällt.
Yuval Filmus

@ user9214 Deine Idee klingt so, als ob sie funktionieren sollte. Sie sollten sich wahrscheinlich an das "zuletzt gefundene Blatt" erinnern und es verwenden, um Knoten beim Zurückverfolgen zu kennzeichnen, wobei Vorder- und Hinterkanten unterschiedlich behandelt werden. Probieren Sie es aus und lassen Sie uns wissen, wie es gelaufen ist.
Yuval Filmus

Antworten:


5

Ja, ich denke du kannst das in O(1)Zeit. Ich skizziere unten eine Methode. Es gibt wahrscheinlich einen einfacheren Weg, aber das Folgende sollte ausreichen.

Vorverarbeitung. Ich gehe davon aus, dass wir Ihren Baum als einen verwurzelten Baum mit einer Wurzel betrachten können. Kommentieren Sie in der Vorverarbeitung jeden internen Knotenw mit einem Beispiel eines Blattes, das ein Nachkomme von ist w. Dies kann in erfolgenO(n+m) Vorverarbeitungszeit mit einem sehr einfachen Top-Down-Traversal (DFS).

Definieren Sie auch p() rekursiv wie folgt: wenn w hat also irgendwelche Geschwister p(w)=w;; Andernfalls,p(w)=p(v) wo v ist der Elternteil von w;; undp(r)=r, wo r ist die Wurzel von T. Auf Englisch,p(w) ist definiert als der Knoten, der durch Beginnen bei erhalten wird wund weiter nach oben, bis wir einen Knoten erreichen, der zwei oder mehr Kinder (oder die Wurzel) hat. In der Vorverarbeitung berechnen wir den Wert vonp(w) für jeden Knoten w und speichern Sie es in Verbindung mit w. Auch dies kann in berechnet werdenO(n+m) Zeit.

Beantwortung einer Anfrage. Hier erfahren Sie, wie Sie die Abfrage beantworten und jedes Blatt zurückgeben, von dem aus Sie erreichen könnenv mit einem Pfad einschließlich (u,v)und keine anderen Kanten, die auffallen v::

  • Fall 1: Angenommen u ist ein Kind von v. Die Beantwortung Ihrer Anfrage bedeutet dann, dass jedes Blatt zurückgegeben wird, von dem ein Nachkomme stammtu. Dies kann in erfolgenO(1) Zeit mit der Anmerkung auf u.

  • Fall 2: Angenommen u ist der Elternteil von v, und uhat mindestens ein weiteres Kind. Dann schauen Sie sich ein anderes Kind von anu, nennen w. Die Beantwortung Ihrer Anfrage bedeutet dann, dass jedes Blatt zurückgegeben wird, von dem ein Nachkomme stammtw. Dies kann in erfolgenO(1) Zeit mit der Anmerkung auf w.

  • Fall 3: Angenommen u ist der Elternteil von v, und uhat keine anderen Kinder. Dann lassu=p(u) und lass w sei ein anderes Kind von u (kein Vorfahr von v). Die Beantwortung Ihrer Anfrage bedeutet dann, dass jedes Blatt zurückgegeben wird, von dem ein Nachkomme stammtw. Dies kann in erfolgenO(1) Zeit mit der Anmerkung auf w.

In allen drei Fällen kann die Antwort auf die Abfrage in berechnet werden O(1) Zeit.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.