【问题标题】:find a node of a tree in another tree在另一棵树中找到一棵树的节点
【发布时间】:2014-04-05 08:28:51
【问题描述】:

我的问题是: 考虑两棵树 P 和 R。我需要将 P 的最深可能级别的节点与树 R 的最深可能级别的节点匹配。这意味着树中的所有节点就像从最一般到最具体的层次关系.应该找到树 P 与树 R 的最具体匹配。 需要最优化的方法。

例如,让我们有一个审阅者面板。每个审阅者都有自己的兴趣树,从一般兴趣到具体兴趣,从能源到沼气厂。现在有一篇论文要与审稿人的兴趣相匹配。寻找与论文类别最匹配的审稿人。每篇论文还具有从最一般类别到完全特定类别的类别树。

【问题讨论】:

  • 这是一个有趣的问题,但不太适合stackoverflow。您应该首先尝试对“最具体的匹配”和“最佳方法”提出一个非常清晰的定义。
  • 最具体的匹配,例如节点的字符串变量中最长的匹配,最佳匹配是指某种方法,而不是简单地在整个树中搜索匹配。我希望这能让问题更清楚

标签: algorithm search data-structures tree nodes


【解决方案1】:

编辑:深度差异的固定表达式

  1. 决定您希望对匹配节点的深度和“相似性”给予多大的重视。使用它来制作评分函数 s(x, y) = a*(-|depth(x) - depth(y)|) + (1-a)*(similarity(x, y))。 (similarity(x, y) 可以是 x 和 y 的任何函数——例如,如果 x 和 y 是字符串,它可能是它们最长的公共子序列的长度。)
  2. (概念上)为树 1 中的每个节点创建一个顶点,为树 2 中的每个节点创建一个顶点,并为每对顶点 (x, y) 创建一条边,其中 x 在第一棵树中,y 在第二棵树中。将此边的权重设置为 s(x, y)。
  3. 你现在有一个bipartite maximum weighted matching problem,也就是分配问题。应用匈牙利算法在 O(n^3) 时间内找到最优解。

【讨论】:

  • 非常感谢您的帮助,需要一个解释:如果可以将多个任务分配给代理怎么办?匈牙利算法似乎无法解决这个问题
  • @user2538255:如果允许,那就更简单了:只需将每个任务 x 分配给最大化 s(x, y) 的代理 y。
【解决方案2】:

您可以使用Trie 解决它,其中根具有最概括的类别,其子项具有更具体的类别,其子项具有越来越具体的类别。您需要从根开始找到最长的匹配项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2021-01-09
    • 2015-12-20
    相关资源
    最近更新 更多