Учитывая модель EREW-PRAM, которая позволяет мне использовать произвольное число параллельно работающих процессоров, не конфликтуя ни с ними, ни в режиме чтения, ни в режиме записи, мне нужно найти число путей длины 4, учитывая, что у меня естьматрица A смежности входных узлов-узлов, представляющая ориентированный граф, и мне нужно исключить пути, которые не используют четкие ребра (например: (a, b), (b, a), (a, b), (b,а) не является допустимым путем).
У меня есть функция, которая использует n ^ 3 процессоров и вычисляет умножение матриц двух заданных матриц за время O (logn):
mult-matrix(A, A, n) => B
-> дает мне пути длины 2.
mult-matrix(B, B, n) => C
-> дает мне пути длины 4, но я думаю, что он рассматривает пути, которые пересекают одни и те же ребра.
Я попытался вычесть 1 из элементов C, у которых узел u связывается с узлом v в обоих направлениях, но я не уверен, что это работает.
Как я мог решить проблему, учитываячто мне просто нужно исключить некоторые пути из результирующей матрицы C?
Любое рабочее решение приветствуется, учитывая, что число процессоров ограничено до n ^ 3, а время должно быть O (logn) в худшем случае,Упражнения должны решаться с использованием псевдо-паскальского языка, но при наличии рабочего решения я смогу написать псевдокод самостоятельно.