2

問題は、最小の重みと最大の深さが6になる可能性のあるすべてのパスを見つける必要があることです(5つの頂点が中央にある可能性があります)。2 つの頂点の間には、異なる重みを持つより多くの関係が存在する可能性があります。

たとえば、パス:

weight(ABEF) = 2+3+1 = 6または2+2+1 = 5、ノード B と E の間で異なる関係の重みを選択した場合。

他の道路についても同様です。関係が異なるため、同じノード間で重みが異なる場合があります。

データベースは巨大で、深さ 6 ですべての可能性を計算するのは非常に時間がかかります :/

2 つのノード間のすべての関係の重みを 1 回チェックし、同じ検索で最大の重みを持つものをチェックせず、同じ最小の重みを持つ関係がある場合は両方を取得するにはどうすればよいですか?

これまでのところ、私は持っています:

START n=node(158371), m=node(183090)
MATCH p=n-[r*..4]-m
WITH p, length(p) as len,r
RETURN  reduce(res=0, x in r: res + x.weight) as totalscore, len
ORDER BY totalscore desc;

しかし、深さ6で検索してすべての可能性を見つけると、データベースが壊れます。reduce 関数は文字列を収集するように機能しますが、重みをカウントする必要があります。( 2+3+1=6 not 2+3+1=231)

Ps グラフィック イメージが表示されない場合は、ここにあります: http://postimg.org/image/bf9rfdtf7/

4

2 に答える 2

0

この場合、ダイクストラ アゴリズムが真の問題ソルバーのように思えます。しかし、多くの基準があるかどうか疑問に思っていたので、最初に返される結果が少ないと予想されるものでフィルタリングしてから、最も安価なパスがはるかに高速になる可能性があることを見つけました。

しかし、Cypher で重みとパスを配列に格納することは可能ですか?

于 2013-08-10T10:21:29.603 に答える