【问题标题】:Determine if two nodes in a hierarchy are connected确定层次结构中的两个节点是否已连接
【发布时间】:2018-10-30 09:16:33
【问题描述】:

我有一堆按层次结构排列的节点如下:

我想确定一个节点是否连接到另一个节点,即使两者之间的连接被层次结构中的不同级别分隔。

例如,节点 A 通过节点 B 和 D 连接到节点 K。节点 A 也通过节点 B 和 D 或节点 C 和 G 连接到节点 L。

节点 E、F、H、J 和 M 未连接到节点 L。

在不通过从父节点到某个子节点的层次结构来确定两个节点是否连接的情况下,我相信可以为每个节点分配一些数值,并通过一个取两个数值的公式节点可以确定它们是连接的。

这可能吗?

【问题讨论】:

  • 你能用这样的东西吗:stackoverflow.com/questions/10310809/…?您可以将您的图视为森林并为每个根节点(示例中的 A 和 M)运行算法,并将多个前/后顺序标签分配给具有多个父节点的节点
  • 对于“已连接”,您的意思是“通过遍历 only 父关系或 only 子关系,但不能同时访问两者”?
  • 您对“连接到”的定义需要澄清。我可以清楚地看到从 E 到 L 经 D 的线,但你是在告诉我它们没有连接?
  • 通过“连接”,无论您是从孩子(或孙子)开始,然后按自己的方式到达父母(或祖父母)还是反过来。
  • 您可以通过严格的层次结构相当容易地做到这一点。但是,从 G 到 L 的链接打破了严格的等级制度。您最终可能会得到每个节点的多个数值。这会让事情变得相当复杂。

标签: algorithm graph-algorithm


【解决方案1】:

是的,通过提供某种渐进式数字或模式 (Id) 可以对此有所帮助。看看下面的图片-(对不起,小尺寸的图片。点击它可以正常查看)

我已经为每个节点分配了一个 Id no like 1 给 root 然后 1-1....1-N 给它的孩子。现在要检查节点是否已连接,我们只需要检查一个节点 ID 是否以另一个节点 ID 开头。如果是这样,则节点连接,否则不连接。

【讨论】:

  • L-G 和 J-M 的连接怎么样?
  • 谢谢,我已经更新了图片。你的第一点是有效的。我的解决方案不能解决这个问题。让我再检查一下。
  • 如果我事先知道所有节点并且它们保持静态,这将起作用。但是假设我将节点 B 从 A 断开并将其连接到节点 H。 D、E、F、K、L 的所有节点值都必须更新。这将需要遍历节点,这是我想要避免的。
  • 实际上,我认为M 应该是J 的另一个“父级”,您可以通过给出L 和@ 来解决问题(尽管查询时间稍长) 987654326@ 的 ID 列表,分别如 (1-1-1-2, 1-2-1-1)(1-2-3, 2-1)M 的 ID 为 2)。
  • 您的解决方案与我的想法一致,但我相信与其使用 1-1-2 之类的数字模式将节点绑定到层次结构中的特定级别,不如使用数值生成标识两个相邻节点的关系,因此即使您将这两个节点移到层次结构中的其他位置,该数值关系值仍然保持不变。也许类似于区块链的东西?
猜你喜欢
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多