2012-07-17 4 views
0

MATLAB에서 재귀를 사용하여 dendrogram을 복제하는 링크 된 구조를 생성하고 싶습니다.재귀를 사용하여 dendrogram의 matlab 구조체 만들기

예를 들어 매우 간단한 덴도 그램은 linkage 함수를 호출하여 생성 된 행렬로 표현 될 수 있습니다. 제 결합은 거리 1.0, 두번째 링크와, 아이템 1과 2 사이

1 2 1.0 
4 3 1.5 

1.5

의 거리, 항목 3, 4로 나타낸도 1 및도 2의 합병 사이

따라서이 행렬에서 node1.children = {node2, node3} 및 node2.children = {node4, node5}와 같은 구조가 필요합니다. 리프 노트가 node3 item3, node4가 item1, node5가 item2입니다.

이 유형의 구조를 생성하는 재귀 함수는 어떻게 작성합니까?

답변

3

handle에서 파생되는 node 클래스를 만듭니다.

classdef node<handle 

    properties 
     children 
    end 

    methods 
     % a method that parses the incoming matrix and hands it over to its 
     % children to do the same 
    end 
end 

과 같이 그 일의 장점

어린이 당신이 obj.children{end+1}=newChild처럼 저장하고 당신이 저장하는 것은 당신이 handle에서 유래하기 때문에 아이에게 단지 참조입니다 수 있다는 것입니다.

+0

자녀가 여러 부모를 가질 수있는 더 복잡한 구조에서는 이것이 유일한 방법이라는 것을 잊지 마십시오. – bdecaf

+0

생성자가 어떻게 생겼는지 쓸 수 있습니까? 연결 정보가 들어있는 입력 행렬을 구문 분석하는 방법을 알아 내는데 어려움을 겪고 있습니다. 감사! – user1027169

+1

@ user1027169 링크 매트릭스에 대한 추가 정보가 필요합니다. 특히 합병 지수를 계산하는 방법. 하지만 기본적으로 leafs가되는 노드를 찾아야 만합니다. 그런 다음 부모 노드를 추가하여 트리를 작성하기 시작합니다. – denahiro

0

노드 클래스를 핸들의 서브 클래스로 갖는 것에 대한 언급 외에도.

당신은 매우 우아하게이 전략을 사용 할 수있는 : 모든 노드를 포함하는 빈리스트를 준비

  1. 을 사용하면 노드가 목록에있는 경우 라인이 찾아 읽을 때 - 그렇지 않으면 (셀?) 목록
  2. 이제 목록에서 루트 노드를 가지고 수행 될 때까지
  3. 1.에서 부모에게
  4. 반복 아이를 추가를하고 추가 - 당신이
  5. 원하는 구조에있을 것입니다
관련 문제