Graph 找到长度为4的路径,从有向图的邻接矩阵开始,只考虑不同的边?

Graph 找到长度为4的路径,从有向图的邻接矩阵开始,只考虑不同的边?,graph,parallel-processing,Graph,Parallel Processing,给定一个EREW-PRAM模型,该模型允许我并行使用任意数量的处理器,而不会发生冲突,无论是读访问还是写访问,我都需要找到长度为4的路径数,考虑到我有一个表示有向图的输入节点邻接矩阵A,并且我需要排除不使用不同边的路径(例如:(A,b),(b,A),(A,b),(b,A)不是有效路径) 我有一个函数,它使用n^3个处理器,计算时间O(logn)内两个给定矩阵的矩阵乘法: mult矩阵(A,A,n)=>B-->给出长度为2的路径 mult-matrix(B,B,n)=>C-->给出了长度为4的路径

给定一个EREW-PRAM模型,该模型允许我并行使用任意数量的处理器,而不会发生冲突,无论是读访问还是写访问,我都需要找到长度为4的路径数,考虑到我有一个表示有向图的输入节点邻接矩阵A,并且我需要排除不使用不同边的路径(例如:(A,b),(b,A),(A,b),(b,A)不是有效路径)

我有一个函数,它使用n^3个处理器,计算时间O(logn)内两个给定矩阵的矩阵乘法:

mult矩阵(A,A,n)=>B
-->给出长度为2的路径

mult-matrix(B,B,n)=>C
-->给出了长度为4的路径,但我认为它考虑了穿过相同边的路径

我试着从C元素中减去1,其中有一个节点u在两个方向上与一个节点v通信,但我不确定它是否有效

考虑到我只需要从结果矩阵C中排除一些路径,我如何解决这个问题


考虑到处理器数量限制在n^3,并且在最坏情况下时间必须为O(logn),任何工作解决方案都是值得赞赏的。这些练习必须使用伪pascal语言来解决,但如果有一个有效的解决方案,我应该能够自己编写伪代码。

我想我在

给定一个输入矩阵A,我能够用提供的函数计算长度为2、3和4的路径的邻接矩阵

  • A2是通过乘以A*A获得的邻接矩阵,包含长度为2的路径
  • A3通过乘以A2*A获得,包含长度为3的路径
  • A4通过乘以A3*A获得,包含长度为4的路径
为了排除重复的边,我必须计算矩阵C,通过在计算出的矩阵中进行元素减法得到

C[i,j]=A4[i,j]-A3[i,j]-A2[i,j]-A[i,j]

C包含最终结果

以下伪代码使用O(n^3)处理器和时间O(logn)解决了EREW-PRAM的问题

procedure paths_length_4(A, n) // Work = O(n^3 logn)
begin
    A2 := mult_matrix(A, A, n) // T=O(logn), P=O(n^3)
    A3 := mult_matrix(A2, A, n) // T=O(logn), P=O(n^3)
    A4 := mult_matrix(A3, A, n) // T=O(logn), P=O(n^3)
    for all i,j where 1 ≤ i ≤ n, 1 ≤ j ≤ n pardo // P=O(n^2)
        C[i,j] := A4[i,j] - A3[i,j] - A2[i,j] - A[i,j]
end