Gegeben ist ein Tag. Sie möchten jeden Knoten so kennzeichnen, wie viele Knoten von ihm aus erreichbar sind. ist eine unbedeutende Obergrenze; ist eine Untergrenze (glaube ich). Gibt es einen besseren Algorithmus? Gibt es Grund zu der Annahme, dass die Untergrenze verbessert werden kann (verwandt: Was genau ist über Untergrenzen für den transitiven Verschluss bekannt)?
Motivation: Ich musste dies einige Male tun, während ich fol Formeln als Dags darstellte.
Bearbeiten: Bitte beachten Sie, dass nur Pfade zählt , nicht erreichbare Knoten . (Ich habe dies hinzugefügt, weil anscheinend viele Leute dachten, diese einfache Lösung würde durch die Stimmen funktionieren, die ich bei einer jetzt gelöschten Antwort gesehen habe.) Tatsächlich tritt dieses Problem genau dann auf, wenn Sie etwas Interessantes mit "gemeinsam genutzten" Teilen tun möchten, Knoten, die von erreichbar sind mehr als ein Pfad. Außerdem sage ich dag, denn wenn sie gelöst sind, ist das Lösen von Digraphen einfach.
quelle
Antworten:
Das transitive Schließen eines gerichteten Graphen mit Kanten und Ecken kann etwas schneller als die berechnet werden, jedoch nicht viel. Ein -Zeitalgorithmus wird in einer Fußnote von Chans WADS-Papier über APSP aus dem Jahr 2005 (Journalversion in Algorithmica 2008) erwähnt. Eine leichte Verbesserung von findet sich in der ICALP'08-Veröffentlichung "A New Combinatorial Approach for Sparse Graph Problems" von Blelloch, Vassilevska und Williams. Trotzdem weiß ich nicht, ob es einfacher ist, Nachkommen zu zählen, als sie tatsächlich zu findenm n O ( m n ) O ( n2+ m n / logn ) O ( n2+ m n log( n2/ m) / log2n )
quelle
Ich denke, Sie können die Matrixmultiplikation verwenden, um den transitiven Abschluss der DAG zu berechnen, und dann die Anzahl der Nachbarn als gewünschte Anzahl verwenden. Ich bin kein Experte für Literatur, aber ich denke, Sie können den transitiven Abschluss gleichzeitig mit der Matrixmultiplikation berechnen, dh Zeit: http://www.computer.org/portal/web/csdl/ doi / 10.1109 / ACSSC.1995.540810 .nω
quelle
In Ihrem Kontext vielleicht nicht nützlich, aber Sie können eine Annäherung mithilfe von Synopsis Diffusion (http://www.cs.cmu.edu/~sknath/sd.htm) erhalten. Ich denke, das macht es zu O (V + E). Die Simulation der Synopsenverteilung auf einem Uniprozessor ist für mich O (V + E) (Sie müssen zuerst eine topologische Sortierung durchführen, die auch O (V + E) ist).
quelle