2012-06-25 3 views
1

이미 클러스터 된 (leave) 트리에 저장된 객체에서 dendrogram을 그려야합니다. Java의 My Cluster 객체는이 그림으로 나타낼 수 있습니다. 각 잎은 객체를 포함하고 각 노드는 자식 사이의 거리를 포함합니다.트리의 클러스터링 된 객체에서 계단식 드로잉을위한 알고리즘

http://i.stack.imgur.com/6nktv.png

이제 I는 Dendrogram이 단계적 그리려 때문에 제 1 물체 및 2 그려야 후 3 자에게 추가되어야하는 개체. 그 다음 5와 6은 함께 끝납니다. 모든 것이 연결되어 있습니다. 나는 이것을 쉽게 그리기위한 모든 도구를 이미 가지고 있지만, 나무를 올바르게 걷는 효율적인 방법을 찾을 수 없습니다.

이것은 예에서 지금까지의 결과 여야합니다 (편집 : 실수가 있습니다. 5에서 6까지의 거리는 이제 3에서 1 & 2까지의 거리보다 작아 보이지만, 필자의 예에서는 그렇지 않습니다. !) : http://i.stack.imgur.com/gecAF.png

누구나이 재귀 알고리즘에 대한 몇 가지 팁이 있습니까?

답변

0

먼저 깊이를 렌더링하고 있습니다. 레이아웃이 올바르게 작동하려면 깊이를 추적해야 할 필요가 있습니다. 또한 비 터미널 메모도 그려야합니다 ("*"는 3보다 먼저 그려집니다)

기본적으로

draw(node) 
{ 
    if(hasleft) draw(left) 
    if(hasright) draw(right) 
    drawme() 
} 

이 이진 트리를 가정하지 않습니다,하지만 당신이 그려 한 것입니다 -이 때문에 레이아웃 문제의 훨씬 더 복잡 것입니다 - 당신이 정말로 폭을 그리기 고려할 처음부터 위에서 아래로, 그것은 훨씬 덜 고통스러운 레이아웃을 만든다.

+0

아웃을 위해 안감 부분, 나는 바닥에서 시작하는 것이 더 쉽다고 생각한다 (나는 추가 된 그림의 레이블 옆에서 시작해야한다는 것을 안다). 트리는 전적으로 이진 검색 트리가 아닙니다. 즉 두 트리가 다시 한 트리에 클러스터 될 수 있습니다. 그러면 더 이상 생각하지 않습니다. – simP

+0

아아, 레이아웃을 변경하면 일이 더 쉬워 지지만 완벽하지는 않습니다. 그러나 종단 노드 이외의 라벨을 붙이려는 의도가 없다면 비교적 간단합니다.하지만 첫 번째 레이아웃은 훨씬 멋집니다. 두 번째 다이어그램이 바이너리 트리가 아니라는 것이 맞습니다. 루트 요소가 4 명의 자식을 가지고 있기 때문에 - 부모 선의 경우, 부모 린트의 수직 오프셋을 파악하기 위해 전체 자식 수를 알아야합니다. –

+0

이것이 의미하는 것이지만 첫 번째 것은 확실하지 않습니다. 그림은 레이아웃이 아니며 Java의 My Tree 클래스의 Paint에서 일부 데이터가 포함 된 시각적 표현으로, 클러스터 된 객체가 무엇인지 분명하게 보여줍니다. – simP

관련 문제