2012-04-10 6 views
1

대부분의 질문은 유사성 (pidgeonholes)을 기반으로 노드를 그룹화하는 것과 관련하여 간단하게 근접성을 기준으로 노드를 그룹화하고자합니다.노드를 효율적으로 그룹화 하시겠습니까?

나는 크고 빽빽한 노드 모음을 가지고 있습니다. 잠재적으로 수백만입니다. 화면에서 그들은 어느 정도의 공간을 차지하므로 크기가 있다고 생각할 수 있습니다.

내가 뭘하려는 것은 처리 시간과 컨테이너 당 더 많은 노드를 수집 할 때이 노드를 단일 포함 노드로 효율적으로 그룹화하는 것입니다.

현재 시도가 너무 느려지거나 작동하지 않았지만 마음에있는 동일한 솔루션을 기반으로합니다 : 노드를 가져 와서 주변 노드를 무작위로 계산하여 가능한 많은 컨테이너를 계산하고 그룹화 한 다음 가장 효과적인 컨테이너를 선택합니다.

귀하의 아이디어는 무엇입니까? 특정 언어가 아니지만, PHP 또는 JavaScript를 사용하여 작성하게 될 것입니다.

Edit 

은 내가 노드에서 스트리밍 할 것이라고 언급하는 것을 잊었다, 그래서 최대의 수백만을 위해, 그들이 와서, 용기에 넣어 새로운 컨테이너를 만들거나 심지어는 필요에 따라 삭제, 무제한 노드를 수용 할 필요가 컨테이너. 그것은 가장 이상적 일 것입니다.

답변

1

이 문제를 클러스터링이라고합니다. 노드 집합과 두 노드 사이의 거리를 계산하는 함수 m이 있습니다. 이제 각 클러스터 내의 모든 노드 사이의 모든 거리의 합이 최소가되도록 클러스터를 검색합니다.

쉬운 알고리즘이 있습니다. 예를 들어 k-Meansk-Medoid을 검색하십시오. 이 두 가지는 당신의 접근법과 매우 유사합니다. 더 효율적인 버전은 CLARANS 알고리즘 [NH94]입니다. 나는 당신을 위해 좋은 소스를 찾지 못했지만 여기에 가서 :

(독일어) 일반적으로 클러스터링에 관한 스크립트. CLARANS http://bib.dbvis.de/uploadedFiles/232.pdf

용지에 대한 CLARANS 이름에 http://www.comp.nus.edu.sg/~atung/publication/pakdd002.pdf

은 "k는"클러스터의 개수를 설명 페이지 45 http://www.informatik.hu-berlin.de/forschung/gebiete/wbi/teaching/archive/ws1112/vl_datawarehousing/15_clustering_12.pdf

영어 스크립트에 대한 의사 코드에 CLARANS를 포함합니다. 이 3 가지 알고리즘을 위해서는 선험적으로 클러스터 수를 지정해야합니다.

다른 접근 방법은 DBSCAN 알고리즘을 참조하십시오. 이 알고리즘의 클러스터 수는 필요하지 않지만 노드에 대한 다른 지식을 제공해야합니다. 위키 피 디아 (Wikipedia) 기사가이를 잘 설명합니다. :-)

+1

필자는 자신의 코드에서 클러스터링이라는 용어를 사용하고 있으며, 정확히 내가 원하는 것입니다. 알고리즘에 감사드립니다. 나는 그것들을 살펴보고 그들이 적절한 해결책인지 여부를 알려줄 것이다. – DanRedux

+0

나는 나를 위해 일할 알고리즘을 고안했다. 내 "k"컨테이너를 무작위로 배치하고, 각 노드에 가장 가까운 컨테이너를 찾고, 그 그룹을 의미하며, 몇 번 반복하여 컨테이너를 이동시킵니다. 내가 개선해야 할 부분은 루핑입니다. 일부 노드는 범위를 벗어나고 다른 노드의 범위에있는 노드를 통해서만 루프하는 더 빠른 방법이 있는지 궁금합니다. 하지만 노드 범위가 범위를 벗어난 매우 드문 영역이있을 수 있습니다. – DanRedux

+0

DBSCAN에 대한 기사를 이미 읽었습니까? 이것은 당신이 원하는 것 같다. – Basti

관련 문제