E037. Кратчайшие пути фиксированной длины, количества путей фиксированной длины
Источник: e-maxx.ru/algo, страница PDF 116.
Ниже описываются решения этих двух задач, построенные на одной и той же идее: сведение задачи к возведению матрицы в степень (с обычной операцией умножения, и с модифицированной).
Количество путей фиксированной длины
Пусть задан ориентированный невзвешенный grafo
с
vertexми, и заgiven inteiro
. it is required для
каждой пары вершин
и
find количество путей между этими vertexми, состоящих ровно из
рёбер. Пути при
этом рассматриваются произвольные, не обязательно простые (т.е. вершины могут повторяться сколько угодно раз).
Будем считать, что grafo задан матрицей смежности, т.е. матрицей
размера
, где каждый
element
равен единице, если между этими vertexми есть edge, и нулю, если ребра нет. Описываемый ниже Algoritmo работает и в случае наличия кратных рёбер: если между какими-то vertexми
и
есть сразу
рёбер, то в матрицу смежности следует записать это number
. Также Algoritmo корректно учитывает петли в grafoе,
если таковые имеются. Очевидно, что в таком виде матрица смежности grafoа является ответом на задачу при
—
она содержит количества путей длины
между каждой парой вершин.
Solução будем строить итеративно: пусть ответ для некоторого
найден, покажем, как построить его для
. Обозначим через
найденную матрицу ответов для
, а через
— матрицу ответов, которую
необходимо построить. Тогда очевидна следующая формула: Легко заметить, что записанная выше формула — не что иное, как произведение двух матриц
и
в самом
обычном смысле: Таким образом, Solução этой задачи можно представить следующим образом: Осталось заметить, что возведение матрицы в степень можно произвести эффективно с помощью Algoritmoа Бинарного возведения в степень.
Итак, полученное Solução имеет асимптотику
и заключается в бинарном возведении в
-ую
степень матрицы смежности grafoа.
Кратчайшие пути фиксированной длины
Пусть задан ориентированный взвешенный grafo
с
vertexми, и заgiven inteiro
. it is required для каждой
пары вершин
и
find длину кратчайшего пути между этими vertexми, состоящего ровно из рёбер.
Будем считать, что grafo задан матрицей смежности, т.е. матрицей
размера
, где каждый
element
содержит длину ребра из вершины
в вершину
. Если между какими-то vertexми ребра нет,
то соответствующий element матрицы считаем равным бесконечности
. Очевидно, что в таком виде матрица смежности grafoа является ответом на задачу при
—
она содержит длины кратчайших путей между каждой парой вершин, или
, если пути длины
не существует.
Solução будем строить итеративно: пусть ответ для некоторого
найден, покажем, как построить его для
. Обозначим через
найденную матрицу ответов для
, а через
— матрицу ответов, которую
необходимо построить. Тогда очевидна следующая формула: Внимательно посмотрев на эту формулу, легко провести аналогию с матричным умножением: фактически, матрица
умножается на матрицу
, только в операции умножения вместо суммы по всем
берётся минимум по всем
:
где операция
умножения двух матриц определяется следующим образом: Таким образом, Solução этой задачи можно представить с помощью этой операции умножения следующим образом: Осталось заметить, что возведение в степень с этой операцией умножения можно произвести эффективно с помощью Algoritmoа Бинарного возведения в степень, поскольку единственное требуемое для него свойство — ассоциативность операции умножения — очевидно, имеется.
Итак, полученное Solução имеет асимптотику
и заключается в бинарном возведении в
-ую
степень матрицы смежности grafoа с изменённой операцией умножения матриц.
C# solução
rascunho automático, revisar antes de enviar// C# draft for: Кратчайшие пути фиксированной длины, количества путей фиксированной длины
// Original e-maxx article has no compact code listing in the extracted PDF text.
C++ solução
correspondente/original// C++ source for: Кратчайшие пути фиксированной длины, количества путей фиксированной длины
// Compact code block was not extracted from this article.
Java solução
rascunho automático, revisar antes de enviar// Java draft for: Кратчайшие пути фиксированной длины, количества путей фиксированной длины
// Original e-maxx article has no compact code listing in the extracted PDF text.
Материал разбит как Algoritmoическая Tarefa: изучить постановку, понять асимптотику и реализовать Algoritmo на выбранном языке.
Vacancies for this task
vagas ativas with overlapping task tags are mostradas.