Verwenden Sie Gremlin, um den kürzesten Pfad in einem Graphen zu finden, wobei eine gegebene Liste von Scheitelpunkten vermieden wird?

8

Ich muss Gremlin verwenden, um den kürzesten Weg zwischen zwei Knoten (Scheitelpunkten) zu finden und dabei eine Liste der gegebenen Knoten zu vermeiden.

Ich habe bereits:

v.bothE.bothV.loop(2){!it.object.equals(y)}.paths>>1

Um meinen kürzesten Weg zu finden.

Ich habe versucht, etwas wie:

v.bothE.bothV.filter{it.name!="ignored"}.loop(3){!it.object.equals(y)}.paths>>1

aber es scheint nicht zu funktionieren.

Bitte helfen !!!

    
Brett Hannah 31.08.2011, 10:07
quelle

1 Antwort

14

Die zweite Lösung, die Sie haben, sieht korrekt aus. Um jedoch klar zu sein, was Sie erreichen möchten. Wenn x und y die Scheitelpunkte sind, die den kürzesten Pfad zwischen und einen zu ignorierenden Scheitelpunkt während des Durchlaufs finden sollen, wenn der Eigenschaftsname "ignored" lautet, lautet die Abfrage:

%Vor%

Wenn die "Liste der gegebenen Vertices", die Sie filtern möchten, tatsächlich eine Liste ist, dann wird die Traversierung als solche beschrieben:

%Vor%

Außerdem tendiere ich dazu, einen Bereichsfilter zu verwenden, um sicher zu sein, da dies in eine Endlosschleife übergeht, wenn Sie das & gt; & gt; 1:)

vergessen %Vor%

Wenn es auch ein Potenzial für keinen Pfad gibt, können Sie, um eine unendlich lange Suche zu vermeiden, ein Schleifenlimit (z. B. nicht mehr als 4 Schritte) ausführen:

%Vor%

Beachten Sie, warum der letzte Filterschritt vor den Pfaden benötigt wird. Es gibt zwei Gründe, warum die Schleife unterbrochen ist. Sie sind also möglicherweise nicht bei y, wenn Sie aus der Schleife ausbrechen (stattdessen haben Sie die Schleife verlassen, weil Sie.loops & lt; 5).

Hier ist Ihre Lösung implementiert über die Grateful Dead Grafik, die mit Gremlin verteilt wird. Zuerst ein Setup-Code, wo wir den Graphen laden und zwei Vertices x und y definieren:

%Vor%

Jetzt deine Durchquerung. Beachten Sie, dass es keine namens: "ignored" -Eigenschaft gibt, also habe ich sie geändert, um die Anzahl der Auftritte jedes Songs entlang des Pfades zu berücksichtigen. So wurde der kürzeste Weg der Lieder mehr als 10 mal im Konzert gespielt:

%Vor%

Wenn Sie Gremlin 1.2+ verwenden, können Sie einen Pfadabschluss verwenden, um die Namen dieser Scheitelpunkte (zum Beispiel) anstatt nur der rohen Scheitelpunktobjekte anzugeben:

%Vor%

Ich hoffe, das hilft.

Viel Glück! Marko.

    
Marko A. Rodriguez 02.09.2011, 14:04
quelle

Tags und Links