2013-10-23 3 views
0

나는 UndirectedSparseGraph g를 가지고 있는데, 두 종류의 Node, 즉 User와 Thread 모두 Node를 확장했다. User u에 대해 2 dist 부근, 즉 u의 1 dist 부근에 속하는 스레드에 가장자리가 있기 때문에 u와 연결된 다른 사용자를 검색하고 싶습니다. 나는 KNeighborhoodFilter가 호출자 노드에서 반경 "k"의 노드를 검색하는 방법이라는 것을 알고 있습니다 ... 이것은 내 경우에 1 홉의 스레드와 2 홉의 사용자가 모두 반환된다는 것을 의미하므로 필터링해야합니다. 결과 집합. 이것은 내가 지금까지 가지고있는 것입니다 :KNeighborhoodFilter의 결과를 필터링하는 방법은 무엇입니까?

// filter users in 2-dist nei 
Predicate<Node> onlyUsers = new Predicate<Node>() { 
    @Override 
    public boolean apply(Node node) { 
     return node.getName().startsWith("u"); 
    } 
}; 
// find neighbors of nodes with degree i 
Filter<Node, Edge> filter = new KNeighborhoodFilter<Node, Edge>(u, 2, KNeighborhoodFilter.EdgeType.IN_OUT); 
// retrieve the nodes - but here we have both types of nodes 
Collection<Node> twoDistNei = filter.transform(g).getVertices(); 
// filter the collection to retain only threads 
Collection<Node> twoDistUsers = Collections2.filter(twoDistNei, onlyUsers); 

나는이 접근법으로 올바른 길을 가고 있습니까? 또는 선택한 사용자로부터 거리 2에있는 사용자를 검색하는 작업을 수행하기 위해 다른 패턴을 따라야합니까? 당신은 당신이뿐만 아니라 원래의 '루트'노드를 제거해야하는 것을 제외하고, 의지 작업을하고있어 무엇

안부, 시몬

답변

1

.

근본적으로 세 가지 선택 사항이 있습니다. 1. 지금하고있는 일을 수행하십시오. 2. 세트에있는 이웃의 이웃을 수집하는 코드를 작성하십시오. 이것이 두 부분으로 구성된 그래프 인 경우 루트 만 제거하면 완료됩니다. 건물의 크기가 결코 커지지 않기 때문에이 공간이 더 효율적일 수 있습니다. 3.이 그래프가 두 부분으로 구성된 그래프 인 경우 하이퍼 그래프를 대신 사용하십시오. 여기서 노드는 사용자이고 하이퍼 기호는 스레드입니다. 그런 다음 하이퍼 그래프에 노드의 이웃을 묻습니다.

관련 문제