Database Reference
In-Depth Information
gremlin> bacon = g.V.filter{it.name=='Kevin Bacon'}.next()
gremlin> elvis = g.V.filter{it.name=='Elvis Presley'}.next()
Wir beginnen damit, die Co-Stars der Co-Stars der Co-Stars eines Schauspie-
lers zu finden. Klassischerweise hört man nach sechs Schritten auf, prak-
tisch kann man aber nach vier Schritten aufhören (wenn Sie nichts finden,
können Sie die Suche wiederholen). Wir gehen den Graphen viermal durch,
was alle Schauspieler 4. Grades findet. Wir nutzen dabei den gerade entwi-
ckelten costars-Schritt.
elvis.costars.loop(1){it.loops < 4}
Nur mit Bacon endende Knoten werden behalten. Alle anderen werden igno-
riert.
elvis.costars.loop(1){
it.loops < 4
}.filter{it.equals(bacon)}
Nur um sicherzustellen, dass die Schleife beim Kevin Bacon-Knoten nicht ein
zweites Mal durchlaufen wird, bricht der Filter sie beim Bacon-Knoten ab.
Anders ausgedrückt, wird die Schleife ausgeführt, solange sie nicht viermal
durchlaufen wurde und keinen Bacon-Knoten getroffen hat. Dann können
wir die Pfade ausgeben, die zum Erreichen jedes Bacon-Knotens genommen
wurden.
elvis.costars.loop(1){
it.loops < 4 & !it.object.equals(bacon)
}.filter{it.equals(bacon)}.paths
Nun müssen wir nur noch den ersten Pfad aus der Liste möglicher Pfade
abrufen - der kürzeste Pfad steht an erster Stelle. Das >> nimmt einfach das
erste Elemente von der Liste aller Knoten.
(elvis.costars.loop(1){
it.loops < 4 & !it.object.equals(bacon)
}.filter{it.equals(bacon)}.paths >> 1)
Abschließend benennen wir jeden Knoten und filtern Kanten ohne Daten
über den Groovy-Befehl grep aus.
(elvis.costars.loop(1){
it.loops < 4 & !it.object.equals(bacon)
}.filter{it.equals(bacon)}.paths >> 1).name.grep{it}
Search WWH ::




Custom Search