繁体   English   中英

给定具有自循环的有向加权图,找到与给定节点x完全相距k dist的节点列表?

[英]Given a directed weighted graph with self loops ,find the list of nodes that are exactly k dist from a given node x?

图中的每个边都具有1的权重。图可以具有周期,如果节点具有自循环,则它可以是从0到无穷大的任何距离,具体取决于编号。 我们采取自我循环的时间。

我已经使用bfs解决了这个问题,但是对距离的约束是10 ^ 9的顺序,因此bfs很慢。

我们将在形式(距离,源)的给定图形上询问多个查询,并且o / p是从源顶点开始精确地在给定距离处的节点列表。

约束

1<=Nodes<=500
1<queries<=500
1<=distance<=10^9

我有一种感觉,会有很多重复的计算作为没有。 节点很小,但我无法弄清楚如何在较小的问题中减少问题。

有效的方法是什么?

编辑:我已经尝试过使用矩阵求幂,但对于给定的约束,它太慢了。 问题的时间限制为1秒。

G = (V,E)为图形,并定义邻接矩阵A ,如下所示:

A[i][j] = 1       (V[i],V[j]) is in E
          0       otherwise

在这个矩阵中,对于每个k

(A^k)[i][j] > 0 if and only if there is a path from v[i] to v[j] of length exactly k.

这意味着通过创建此矩阵然后计算指数,您可以轻松获得答案。

对于快速指数计算,您可以通过平方使用指数 ,这将产生O(M(n)^log(k)) ,其中M(n)是nXn矩阵的矩阵乘法成本

在同一图表上查找不同的查询时,这也可以节省一些计算。

附录 - 索赔证明:

基数: A^1 = A ,实际上在A根据定义, A[i][j]=1当且仅当(V[i],V[j])E

假设:假设声明对所有l<k都是正确的

A^k = A^(k-1)*A 根据归纳假设, A^(k-1)[i][j] > 0如果存在从V[i]V[j]的长度为k-1的路径。

让我们检查具有索引ij两个顶点v1,v2
如果它们之间存在长度为k的路径,则将其设为v1->...->u->v2 u的指数为m
从ih A^(k-1)[i][m] > 0因为有一条路径。 另外A[m][j] = 1 ,因为(u,v2) = (V[m],V[j])是边。

A^k[i][j] = A^(k-1)*A[i][j] = A^(k-1)[i][1]A[1][j] + ... + A^(k-1)[i][m]A[m][j] + ... + A^(k-1)[i][n]A[n][j] 

由于A[m][j] > 0A^(k-1)[i][m] > 0 ,则A^(k-1)*A[i][j] > 0

如果没有这样的路径,那么对于每个顶点u使得(u,v2)是边缘,没有从vu的长度k-1路径(其他的v1->..->u->v2是长度为k )的路径。

然后,使用归纳假设我们知道如果A^(k-1)[i][m] > 0A[m][j] = 0 ,对于所有m
如果我们在定义A^k[i][j]的和中分配它,我们得到A^k[i][j] = 0

QED

小注释:从技术上讲, A^k[i][j]ij之间的路径数,长度恰好为k 这可以证明与上面类似,但更多地关注细节。
为了避免数字增长太快(这会增加M(n)因为你可能需要大整数来存储该值),并且因为你不关心0/1以外的值 - 你可以将矩阵视为布尔值 - 仅使用0/1值并修剪其他任何值。

如果图表中有周期,那么您可以推断cycle * N + 1每个相邻节点之间存在链接,因为您可以根据需要进行迭代。

这让我想到了这个想法,我们可以利用这些循环来获得优势!
在检测周期时使用BFS,我们计算offset + cycle*N然后我们得到接近我们的目标(K)

很容易搜索K.

例如

A - > B - > C - > D - > BK = 1000; S = A;

A - 0
B - 1
C - 2
D - 3
B - 1(+ 4N)
在这里你可以检查k - (1+4N) = 0 > 1000 - 1 - 4N = 0 > 999 = 4N > N=249 =>最佳B是249*4 + 1 = 997 floor()
更简单的方法是计算: round(k - offset, cycle)

从这里你可以只计算几个步骤。
在这个例子中(作为REGEX): A(BCD){249}BCD

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM