【问题标题】:Use recursion to build matlab structure of dendrogram使用递归构建树状图的matlab结构
【发布时间】:2012-07-15 23:02:10
【问题描述】:

我想在 MATLAB 中使用递归来生成复制树状图的链接结构。

例如,一个非常简单的树状图可能表示为调用linkage 函数生成的矩阵。

1 2 1.0
4 3 1.5

其中第一个联动在item 1和2之间,距离为1.0,第二个联动在item 3和1和2合并之间,记为4,距离为1.5

因此,从这个矩阵中,我想要一个类似于 node1.children = {node2, node3} 和 node2.children = {node4, node5} 的结构。其中叶子笔记是node3 item3,node4是item 1,node5是item 2。

我将如何编写一个递归函数来生成这种类型的结构?

【问题讨论】:

    标签: matlab recursion


    【解决方案1】:

    我会创建一个派生自handlenode 类。

    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

    【讨论】:

    • 不要忘记,这是一个孩子可以有多个父母的更复杂结构的唯一方法。
    • 你能写出构造函数的样子吗?我在弄清楚如何解析包含链接信息的输入矩阵时遇到了一些麻烦。谢谢!
    • @user1027169 为此,我需要有关链接矩阵的更多信息。尤其是您如何计算合并的索引。但基本上你只需要找出哪些节点是叶子,然后从那里开始通过添加父节点来构建树。
    【解决方案2】:

    除了提到有一个节点类作为句柄的子类。

    你可以使用这个策略非常优雅地做到这一点:

    1. 准备一个空列表以包含所有节点(单元格?)
    2. 当您读取一行时,查找节点是否在列表中 - 否则创建它们并添加它们
    3. 将孩子添加到父母中
    4. 从 1 开始重复,直到列表完成
    5. 现在从列表中获取根节点 - 它将位于您想要的结构中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 2020-06-15
      • 1970-01-01
      • 2020-06-05
      • 2012-10-22
      • 1970-01-01
      相关资源
      最近更新 更多