【问题标题】:Finding path between 2 tree nodes查找 2 个树节点之间的路径
【发布时间】:2020-04-07 13:51:49
【问题描述】:

如何打印树中任意 2 个查询节点之间的路径,而不需要二叉树? 我一直在使用 dfs 并将每个查询的路径存储在向量中并打印出来。 但是如果输入查询号。 qq)(可能不确定)复杂度失败。n=树中没有节点。谁能帮我做一些更好的优化时间复杂度降低的可能是 o(nlogq) 或 o(q*logn).n

【问题讨论】:

  • 您可以使用这种技术在O(log n) 中找到最低的共同祖先,例如en.wikipedia.org/wiki/…。所以两个节点之间的路径是从第一个节点到 LCA 的路径加上从第二个节点到 LCA 的反向路径。
  • 这种方法的时间复杂度是多少?告诉
  • 简单地说:你计算两个节点的深度,从较深的节点向上跳直到深度不相等,然后执行二进制搜索:k 是 log(tree depth),如果向上跳 2^k结果节点不相等,否则什么都不做,减少k并重复此步骤。看这里,LCA,方法 4:codeforces.com/blog/entry/16221
  • 这种方法会提高时间复杂度吗?
  • 是的,需要O(log n) 才能知道路径是什么,如果您需要打印路径,也需要O(path length)(您不能更快地打印路径)。

标签: c++ tree


【解决方案1】:

您是否考虑过使用 UCS 或 A* 算法?具有良好启发式的 A* 将允许您访问最少数量的节点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2012-06-21
    相关资源
    最近更新 更多