【问题标题】:How is closeness between siblings in a tree represented?如何表示树中兄弟姐妹之间的亲密关系?
【发布时间】:2011-05-02 02:46:51
【问题描述】:

例如有人可能想说“鲸鱼”是动物的“孩子”,但“鲸鱼”更像“海豚”而不是“狗”。在这种情况下,“鲸鱼”、“海豚”、“狗”都是动物的孩子,但“鲸鱼”和“海豚”显然有关系。

我对简单地定义更多的子类(例如“海洋动物”、“陆地动物”)不感兴趣,上面的例子只是为了说明......假设我们不能“定义”我们的出路问题。

人们是否只是简单地定义一个加权的部分无环图,知道该图的某些子集实际上是一棵树(不一定跨越)?

编辑:许多人要求进一步澄清。我将使用相同的示例,但可能会更详细

假设我们有以下类别:

    Animals, Place, Object.
    The following sub categories: [land animals, sea animals], [country, state],
 [heavy object, light object]
    And we have the following entries: Whale, Dolphin, Dog, Cat, Hawaii, Japan,
 London, Stone, Rock, Leaf, Car.

    I have an isLike(entry x) function that I can call on any of the entries.

    for example say whale.isLike(dolphin) = 0.7, whale.isLike(dog) = 0.2 and
a table like the following one stores all the values for the isLike() function

            Whale dolphin dog cat hawaii japan london stone
    whale   1     0.7     0.2 0.2  0.01   0.01  0.01   0.008
    dolphin 0.7   1       0.2 0.2  0.01   0.01  0.01   0.008
    dog      etc
    cat      etc
    hawaii    etc 
    japan    etc
    london   etc
    stone    etc

表示这些数据的最佳方式是什么?

我最关心的是如何在isLike()(加权图)中保留层次信息(树)以及关系信息

所以只是询问标准的做法是否是使用有向图(对于树)+加权无向图(对于关系)类型的结构?是这个标准还是有更标准的方式?

【问题讨论】:

  • 我不清楚你到底想表达什么以及为什么。有无数种方法可以比较动物。一些关系可以用数字表示(如游泳速度),其他关系可以用图表更好地表示。你的输入数据是什么?还有,你到底想达到什么目的?

标签: java algorithm data-structures graph tree


【解决方案1】:

您可能希望使用加权的无向边来表示图中的接近度。但是,尚不清楚您要在这里完成什么。根据您要完成的任务,您可能希望将关系与分类层次结构分开。

【讨论】:

  • Michael 我已经编辑了问题以提供更清晰的信息...您现在怎么看?...谢谢!
【解决方案2】:

定义树中节点之间距离的方法有很多种。您可以使用父母、兄弟姐妹、叔叔等。要了解更多信息,请查看Red-Black Trees

您对定义的规定没有意义。我们可以定义距离的唯一方法是向树中添加一些结构信息,以便我们知道如何排列节点。这就是“子类”在层次关系中所做的事情。链接本质上只是“边缘”,就像任何tree can be transformed into a graph 一样。

如果您的节点只是标签,那么它们就是nominal pieces 的数据。您无法计算任何比率或间隔,因此任何距离度量都必须等于来自所需节点的链接数。

如果树中的节点对应于数据结构(例如 Animals),那么我们可以假设这些结构中的每一个都具有共享属性。 (例如:眼睛颜色、体重、身高、isFurry 等)这些属性可能具有区间或比例尺度的域和范围,在这种情况下,我们可以计算出有意义的距离。

为了在这里表示对象之间的距离,您可以意识到您真正要做的是跨一组变量(x= 眼睛颜色,y=重量,z=高度,isFurry=q)定义一个坐标空间。所以每个单独的节点实际上是由一组公共属性定义的坐标空间中的一个向量。因此,您可以计算欧几里得距离、马哈波利斯距离、曼哈顿距离、余弦相似度或您想要的任何其他距离度量。

【讨论】:

  • 定义意味着不使用相似性度量,而是将事物更多地组合在一起......我说的有道理......
  • 但是为了使用相似度度量,我们必须有一种比较相似度的方法。分组创建了我们在定义相似性度量时利用的关联和结构。你分组的方式隐含地创造了距离。
【解决方案3】:

我认为你正在尝试做的是hierarchical clustering,而你所拥有的是所谓的距离矩阵。

【讨论】:

  • 这似乎更适用于试图在数据中找到模式的情况,而不是已经知道模式并只是试图表示它的情况......
  • 您已经拥有的是矩阵。如果您对它感到满意,那么矩阵就是答案。但我虽然你想要一些树状结构,但你还没有那种结构。层次聚类,以及由此产生的树结构(元素的简单分组)就是这样。
  • 基于对问题所做的编辑和提供的示例(确实定义了距离矩阵),这听起来就像这里发生的事情。我不确定操作员是否理解他的目的。如果你知道先验的层次关系,那么你已经有了距离,你可以存储每个节点和其他节点之间的链接。所以是的,您将所有内容存储在图表中。如果要使用该信息对新节点进行分类,可以使用 K-Nearest Neighbors。如果您不知道层次关系,您可以使用 HAC 发现它们。
猜你喜欢
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 2014-11-07
  • 2019-05-06
  • 2019-08-29
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多