我被困在算法分配中,该算法要求在时间复杂度O(dist(v,w)中找到从顶点v到顶点w有n个顶点(无环间接图)的n个树(V,E)中的直接路径。 ))。我必须找到一个预处理程序(在O(n)中运行)来存储一些信息,以便可以实现时间复杂度O(dist(v,w))。
我需要对预处理中的哪些存储有所了解,这将对以后的算法有所帮助。
没有完整的解决方案。
我已经尝试存储可能的路径,但是要创建全局调整列表,我需要二次时间O(n ^ 2)。 Dijkstra的运行也超过了要求的时间复杂度(以及网络的所有路由算法)。 一棵树中的两个节点具有唯一的路径。
也尝试使用动态编程来存储已经发现的所有路径,但是我认为我克服了线性时间。运行BFS并存储所有先前的路径,例如:AndroidManifest.xml
(node, node) : next hop
因此,我需要(A, B) : B and (B, A) : A
(B, C) : C (C, B): B (A, C) : B and (C, A): B
答案 0 :(得分:0)
如果您的网络是一棵树,则每个顶点只有一个“入站”边。因此,您应该尝试遍历从W到V的链接(遵循入站边),而不是其他方式。这将为您提供相反的路径。将其存储在列表中并反转以产生结果。
请注意,如果您尚无从下到上遍历树的方法,则可能需要构建一个顶点字典{child:parent}。构建此词典将花费O(E)时间,然后找到路径将花费dist(V,W)时间。