0

저는 neo4j에서 일부 그래프 이론 알고리즘을 가지고 놀고 있습니다. 내 네트워크 내에서 최소 스패닝 트리 (mst)를 찾으려고합니다. 나는 종합적으로 10,000 명의 사람들의 네트워크를 만들었습니다. 각 사람은 12 개의 관계 유형을 가지고 있으며 각각은 다른 9999로 다시 연결되며 각각의 관계는 자신의 가중치가 할당됩니다.neo4j의 최소 스패닝 트리는 어떻게 작동합니까?

그러나 문제는 내가 정의한 바에 따르면 결과는 전체 네트워크에 걸친 트리가되어야한다는 것입니다. 그러나 neo4j 함수는 전체 네트워크 중 아주 작은 서브 그래프 (약 12 노드 만)를 반환합니다.

코드 I는 다음과 같다을 사용하고 있습니다 :

MATCH (a:Name {Name:"Dillon Snow"}) 
CALL algo.mst(a,"Weight",{stats:true}) 
YIELD loadMillis, computeMillis, writeMillis, weightSum, weightMin, weightMax, relationshipCount 
RETURN loadMillis, computeMillis, writeMillis, weightSum, weightMin, weightMax, relationshipCount 

어떻게 변경할 수있는 기능을 얻을 수

답변

0

algo.mst.*이 성숙 Neo4j에 적응되지 않은 전체 네트워크를 통해 확산 MST를 반환 -Graph-Algorithms-CoreAPI (3.2.5.2/3.3.0.0 @ Dec 2017) 현재 예상치 못한 결과를 초래할 수 있습니다. 그러나 파이프에 끌어 오기 요청이 있습니다. 다음 릴리스에서 일부 변경 사항을 기대할 수 있습니다.

어쨌든 .. 프로 시저가 노드에 새로운 관계 유형 (기본값 : mst)을 추가해야합니다. 연결된 그래프에서 각 노드는 연결되어 있어야하며 연결이 끊어진 그래프는이 특정 연결 구성 요소 (startNode의 노드) 사이의 연결에만 연결됩니다.

나는 당신이 복수 관계 유형 및 더 많은 것 그 후에 한 쌍의 노드 사이에서 맞은 당신을 이해하는 경우에? 예 : 노드 A는 여러 가지 관계로 노드 B에 연결되며 각 노드는 서로 다른 유형 및 속성 값을가집니다. 이것은 문제입니다. 일반적으로 Graph-Algorithms-API는 다중 결과 관련성을 지원하지 않습니다. 각 쌍의 노드는 방향마다 하나의 연결 만 가질 수 있습니다. 다중 형식을 가져올 수 있지만 core-api 자체는 기본 형식을 전혀 모릅니다. 한 쌍의 노드 사이에 multible 관계가 일반적으로 가져 오면 마지막 노드가 승리합니다. 이것은 설명서에 언급되어 있습니다.)

이 제한을 극복하기 위해 일종의 인공 노드로 관계 유형을 대체 할 수 있습니다. 결과 트리를 탐색 할 때 노드 중 하나의 발생이 원래 관계를 나타냅니다.

+0

코멘트 주셔서 감사합니다. 여러 관계에 문제가있을 수 있으므로이 문제를 해결하기 위해 하나의 관계 만 만들었지 만 다른 속성으로 작성하려고했습니다. 예를 들어 내 모든 관계를 '연결됨'이라고 부르지 만 일부는 '친구와 만나는'특성을 갖고 각 관계에는 자체의 '체중'특성이 있습니다. 이것은 많은 다른 그래프 이론 함수를 쉽게 만들었지 만 mst는 만들지 않았습니다. 두 번째로 내 네트워크의 95 % 만 노드 사이에 하나의 관계 만 있습니다. 이것은 적어도 네트워크의 50 %가 연결되어야 함을 의미합니다. – Merlyn

+0

인공 노드 솔루션을 사용해보십시오. 감사합니다. – Merlyn

+0

속성에 대한 제한도 있습니다. 기본적으로 GA-CoreApi는 모든 레이블, 관계 유형 및 속성 유형을 하나로 줄입니다. 어쨌든 현재 구현이 중단되었습니다. – mknblch