【发布时间】:2016-06-16 14:29:34
【问题描述】:
在无向简单图 G = (V, E) 的邻接表表示中,每条边 (u, v) 有两个邻接表条目:[v] 在 u 的邻接表中,[u] 在v 的邻接表。这些被称为彼此的双胞胎。孪生指针是从邻接表条目到其孪生的指针。如果 |E| = m 和 |V| = n,并且内存大小不是约束,在每个邻接表的每个条目中设置孪生指针的最有效算法的时间复杂度是多少?
- Θ(n^2)
- Θ(m+n)
- Θ(m^2)
- Θ(n^4)
我的尝试:
官方给出的答案是Θ(m+n)。可以通过跟踪图的 BFS 或 DFS 中的父节点来设置双指针。
你能给出最有效的算法来在每个邻接列表的每个条目中设置孪生指针吗?
【问题讨论】:
-
您的意思是:最初,邻接表是在未初始化双指针的情况下给出的——初始化双指针的时间复杂度是多少?
-
@Codor,你能按照他的问题给出算法吗? IMO:它是根据 BFS 还是 DFS,rt?
-
是的,我想是的,它应该是 Θ(m+n) 然后(即线性时间)。
标签: c algorithm pointers time-complexity adjacency-list