0

Gibt es unter Verwendung der Abfragesprache Gremlin/TinkerPop eine Möglichkeit, die topologische Ordnung eines gerichteten azyklischen Graphen zu berechnen?Topologische Sortierung in Gremlin

Zum Beispiel ein Diagramm mit den folgenden Kanten gegeben

a -> b, a -> d, b -> c, c -> d, e -> c 

Ich mag würde eine der folgenden topologische Anordnungen erhalten: a, b, e, c, d oder a, e, b, c, d oder e, a, b, c, d.

Antwort

1

Okay, lassen Sie uns Ihre Probe Diagramm erstellen zuerst:

g = TinkerGraph.open().traversal() 
g.addV(id, "a").as("a"). 
    addV(id, "b").as("b"). 
    addV(id, "c").as("c"). 
    addV(id, "d").as("d"). 
    addV(id, "e").as("e"). 
    addE("link").from("a").to("b"). 
    addE("link").from("a").to("d"). 
    addE("link").from("b").to("c"). 
    addE("link").from("c").to("d"). 
    addE("link").from("e").to("c").iterate() 

Und das Kahn's algorithm in Gremlin implementiert:

gremlin> g.V().not(__.inE()).store("x"). 
      repeat(outE().store("e").inV().not(inE().where(without("e"))).store("x")). 
     cap("x") 
==>[v[a],v[b],v[e],v[c],v[d]] 
+0

Das ist nicht die richtige topologische Ordnung liefert, zum Beispiel angesichts der Graph 'a -> b, b-> c, c-> d, a-> d 'gibt die Abfrage' a, d, b, c 'zurück, aber die richtige Antwort ist' a, b, c, d '. Als eine Randnotiz, um diese Abfrage ohne Zeitüberschreitungen auszuführen, musste ich die 'dedupl()' innerhalb der 'repeat (...)' verschieben, weil ich eine riesige DAG habe. Ich denke, es ist semantisch gleichwertig. – Federico

+0

Aktualisiert. Das Beispieldiagramm und die erwarteten Ergebnisse haben sehr geholfen. –

+0

Vielen Dank! Es endet auch wenn der Graph Loops hat, ist es perfekt. – Federico

Verwandte Themen