0

依存関係のあるグラフがあります:

dep1 -> dep2 -> ... -> dep3 -> ...
    |                   ^
    +-> dep4            |
    |                   |
    +-------------------+

直接リンクが存在するだけでなく、サブ依存関係を介したリンクである不要な依存関係を探しています。上記の例では、リンク「dep1->dep3」は不要です。

それらを見つけるための暗号ステートメントは次のようになります。

start n = node(*)
match n -[:dependency]-> n2,
      n -[:dependency*2..]-> n2
 with n, n2
return distinct id(n), n.name, id(n2), n2.name

私はこの問題を単一のgremlinステートメント(「テーブル」ステップを使用)で解決しようとしましたが、それを機能させることができませんでした。これは可能ですか、それとも複数のステートメントでこれを解決する必要がありますか?

ヒント、ヒント、アイデアをいただければ幸いです。

前もって感謝します

4

2 に答える 2

1

その価値について、この質問はここのgremlin-usersグループで議論/回答されました:

https://groups.google.com/forum/?fromgroups="_hl=en#!topic/gremlin-users/N9NYG-aBrvw

于 2013-03-28T21:01:15.693 に答える
0

MarkoとStephenのおかげで、このソリューションを思いつきました。

g.V.transform{
    s-> singleStep = [];
        s.as('origin')
            .out('dependency').aggregate(singleStep)
            .out('dependency')
                .loop(1){ true }{ true }
            .retain(singleStep).as('redundant')
            .dedup()
            .table(new Table(), ['origin', 'redundant']){ it.name + '(' + it.id + ')' }
            .cap().next()
}.filter{ it.size() > 0 }
于 2013-03-29T17:20:38.123 に答える