JAVA怎么求共同祖先,找到两个叶节点的最佳共同祖先,其中节点具有零个,一个或两个父节点...

Goal :

我正在寻找一种算法来找到图的最佳共同祖先,其中图中的节点可以有零个,一个或两个父节点 . 我不确定“最佳共同祖先”的术语:更好的术语可能是“最低共同祖先”,或“最近的共同祖先”等 . 如果有更好的术语,那么请提供描述这种术语的URL .

该算法可以访问完整的图形数据结构 .

给定节点可能具有零个,一个或两个父节点 . 这是关键,因为我在网上看到的算法假定给定节点有零个或一个父节点,而不是两个父节点(参见下面的参考资料) . 例如,下图中的m1节点具有零父项,因为它是根(可以有多个图的根) . d3有两个父母,一个是d2,另一个是b2 .

如果节点存在,节点就会引用父节点,并且如果它们存在则引用所有子节点,因此遍历树和树下是合理的游戏 . 节点可以有零个或多个子节点 . 更改数据结构不是一种选择 .

更靠近两个输入节点的节点优选地比距离更远的节点(即,更接近图的根)更好 .

例如,下面给出的图表显示了一个可能的图表 . 在这种情况下,算法的输入将是节点b5和d4 . 节点b5和d4的最佳共同祖先是b2 . c2不会是因为b3在通向b5的血统中 .

该算法的可能答案可以是至多一个节点,并且在没有两个输入节点的共同祖先的情况下,空集是有效答案 .

Reference Material

Tarjan's off-line least common ancestors algorithm似乎暗示零或一个父母,所以如果这是解决方案,那么答案应该包括对该算法中如何计算两个父母的描述 . Lowest common ancestor的维基百科页面似乎也只考虑其节点有零个或一个父节点而不是两个节点的数据结构:

在树数据结构中,每个节点指向其父节点,...

Diagram :

ZcdtO.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值