3

サイファーでこれをどのように行うことができますか?
n個の親p1、p2、p3 .... pnm個の子c1、c2、c3...cmがあります。
c1がp1、p2、およびp3(の子)から派生し、c2がp1 p2、およびp3 (の子)から派生しているとしますc1が 与えられた場合、 c2を見つけることができますか?(c1と同じ親から派生したノード) 子は1...n個の親を持つことができます。

4

1 に答える 1

8

私は実際に数週間前にここで非常によく似た質問をしました、そして私が得た答えはほんの少しの調整であなたのためにも働くでしょう。

START c1=node(*), c2=node(*)
MATCH c1-[:ChildOf]->parent<-[:ChildOf]-c2 
WITH c1, c2, count(parent) AS parentsFound
WHERE length(c1-[:ChildOf]->()) = parentsFound
  AND length(c2-[:ChildOf]->()) = parentsFound
  AND c1 <> c2
RETURN c1, c2

注:おそらく、を使用するよりも、を選択する方が良い方法がありc1ます。c2node(*)

このクエリのロジックは1行ずつ:

  1. すべての子供から始めc1c2
  2. parentによって共有されているすべてのを検索するc1c2
  3. parent見つかった共有の数を数える
  4. 見つかったsの数がを持っているsのparent総数と一致することを確認してください。parentc1
  5. 見つかったsの数がを持っているsのparent総数と一致することを確認してください。parentc2
  6. (オプション)ノードを自分自身と比較することを気にしないでください
  7. 結果を返します!
于 2013-03-15T19:33:30.833 に答える