2012-08-06 2 views
2

그래프 및 그래프 탐색에 대해 좀 더 배우는 방법으로 Flame 클러스터링 알고리즘을 구현하고 있으며 첫 번째 단계 중 하나는 K- 가장 가까운 이웃 그래프를 구성하는 것이며, 가장 빠른 방법은 노드 목록을 통해 실행하고 각 노드를 연결하는 것만 큼 궁금합니다. 가장 가까운 5 개 이웃입니다. 내 생각으로는 노드에서 시작하여 다른 노드 목록을 반복하고 배열 내에 가장 가까운 노드를 유지하여 맨 위의 n이 모두 무시되도록합니다. 이제 목록을 정렬하고 상위 n 개의 항목을 유지함으로써이 작업을 수행 할 수 있습니다. 그러나 메모리에서 적은 항목을 유지하는 편이 낫습니다. 최종 배열을 가지고이 배열을 다음과 같이 업데이트하는 방법이 있는지 궁금합니다. 반복을 통해, 또는 ak 가장 가까운 이웃 그래프를 생성하는보다 효율적인 방법이 있다면.가장 가까운 이웃들의 그래프를 Java로 구현

또한이 메시지는 K-Nearest Neighbour Implementation in Java과 중복되지 않습니다. KNNG는 KNN과 구별됩니다.

답변

1

목록에 정렬 ​​된 첫 번째 n 노드 배치. 그런 다음 나머지 노드를 반복하고 현재 목록 (즉, 상위 n 노드)에 맞는 경우 목록의 해당 위치에 배치하고 마지막 상위 n 노드를 삭제합니다. 상위 n 목록에 맞지 않으면 버립니다.

for each neighborNode 
for(int i = 0; i < topNList.size(); i++){ 
     if((dist = distanceMetric(neighborNode,currentNode)) > topNList.get(i).distance){ 
      topNList.remove(topNList.size()-1) 
      neighborNode.setDistance(dist); 
      topNList.add(i, neighborNode); 
     } 
+0

처럼 바운드 우선 순위 큐를 사용하는 것입니다 생각합니다. 아무것도 없다면이 점을 받아 들일 것이지만 이것은 n (이웃 수)의 효율성을 감소시켜 O (nm^2)와 같게 만드는 것이 이상적이라고 생각합니다. 나는 O (m^2) 아래로가는 것을 선호 하겠지만, 다시 말하지만, 이것이 문제를 해결하지 못한다고 말할 수는 없습니다. –

+0

이제 알겠습니다. 그래프의 각 노드에 대한 knn을 계산하려고합니다. – Razvan