0

MATLABで再帰を使用して、樹状図を複製するリンク構造を生成したいと思います。

たとえば、非常に単純な樹状図は、linkage関数の呼び出しから生成された行列で表される場合があります。

1 2 1.0
4 3 1.5

ここで、最初のリンケージはアイテム1と2の間にあり、距離は1.0であり、2番目のリンケージはアイテム3と1と2の合併の間にあり、距離は1.5です。

したがって、このマトリックスから、node1.children = {node2、node3}、およびnode2.children = {node4、node5}のような構造が必要になります。リーフノートがnode3item3である場合、node4はitem 1であり、node5はitem2です。

このタイプの構造を生成する再帰関数をどのように記述しますか?

4

2 に答える 2

3

nodeから派生したクラスを作成しhandleます。

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

于 2012-07-17T06:53:36.717 に答える
0

ハンドルのサブクラスとしてノードクラスを持つという言及に加えて。

この戦略を使用して、非常にエレガントに行うことができます。

  1. すべてのノード(セル?)を含む空のリストを準備します
  2. 行を読むときに、ノードがリストにあるかどうかを確認します-そうでない場合は、ノードを作成して追加します
  3. 子を親に追加します
  4. リストが完了するまで1から繰り返します
  5. リストからルートノードを取得します-必要な構造になります
于 2012-07-17T09:04:37.377 に答える