繁体   English   中英

如何使用最大二分匹配解决子树同构?

[英]How to solve Subtree Isomorphism using maximum bipartite matching?

我们如何确定给定的树T是否包含与另一个树S同构的子树?

如果其中一个树可以通过一系列翻转从其他树中获得,即通过交换多个节点的左右子节点,则将两个树称为同构。 任何级别的任意数量的节点都可以交换子节点。 两棵空树是同构的。

我在几个地方读过,可以使用二元匹配算法来解决这个问题,但是我找不到任何非支付来源的细节。 似乎有很多关于这个问题的研究论文,其中大部分都是在付费墙之后,但我目前对这个问题的最新研究算法并不感兴趣。 我的问题是两联匹配如何应用于这个问题?

PS:互联网上似乎有一些关于“同构”含义的混淆。 上面是我在大多数地方发现的定义,但是一些提到“同构”的地方意味着无论节点值如何,树都具有相同的形状。 如果有人能够清除这种困惑,那也很棒。

我将谈论有根的子树同构; 通过尝试所有根源,可以在不考虑效率的情况下处理无根的情况。

基本的想法是,如果你有树木

    A            B
   /|\          /|\
  / | \        / | \
 /  |  \      /  |  \
a1 ...  am   b1 ...  bn
/\      /\   /\      /\

并且想要知道AB的子树,以便A映射到B ,然后对于所有ij ,递归计算是否以ai为根的子树是否是以这种方式植入bj的树的子树那个ai映射到bj (基本情况是当AB是叶子时。)现在,每个子树都是可映射的是不够的,因为如果某些bj具有特别丰富的结构,那么几个ai可能是子树,但是同构的要求赢了“让他们分享那个bj 这是最大匹配的来源:我们尝试将所有aibj匹配,以便可以映射子树。

要做一般的根本问题,请尝试所有可能的B选择。

看到这里 ,有一个子树同构的C#实现。 一个蛮力的,我是编码员:)希望它可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM