Аноним

Алгоритм поиска кратчайших путей между всеми парами при помощи матричного произведения: различия между версиями

Материал из WEGA
нет описания правки
Нет описания правки
Нет описания правки
Строка 2: Строка 2:


== Постановка задачи ==
== Постановка задачи ==
Задача поиска кратчайших путей между всеми парами (APSP) заключается в нахождении кратчайших путей между всеми парами вершин в ориентированном графе с дугами неотрицательной действительной стоимости. Основное внимание уделяется кратчайшим расстояниям между вершинами, поскольку кратчайшие пути могут быть найдены с незначительным возрастанием стоимости. Классические алгоритмы решают задачу нахождения кратчайших путей между всеми парами вершин за кубическое время – O(n3). Наша задача заключается в достижении меньшего времени исполнения алгоритма для графа с небольшими целочисленными стоимостями дуг.
Задача поиска кратчайших путей между всеми парами (APSP) заключается в нахождении кратчайших путей между всеми парами вершин в ориентированном графе с дугами неотрицательной действительной стоимости. Основное внимание уделяется кратчайшим расстояниям между вершинами, поскольку кратчайшие пути могут быть найдены с незначительным возрастанием стоимости. Классические алгоритмы решают задачу нахождения кратчайших путей между всеми парами вершин за кубическое время – <math>O(n^3) \, </math>. Наша задача заключается в достижении меньшего времени исполнения алгоритма для графа с небольшими целочисленными стоимостями дуг.
Пусть дан ориентированный граф G = (V, E), где V = {1, ..., n} – множество вершин, а E – множество дуг. Стоимость дуги (i, j) <math>\in</math> E обозначается как <math>d_{ij}</math>. Матрица D размера <math>n \times n</math> содержит элемент <math>d_{ij}</math> в позиции (i, j). Для простоты предположим, что <math>d_{ij}</math> > 0 и <math>d_{ii}</math> = 0 для всех i <math>\ne</math> j. Если не существует дуги из i в j, положим <math>d_{ij} = \infty</math>. Стоимость, или расстояние, пути представляет собой сумму стоимостей всех дуг на пути. Длина пути равна количеству дуг на пути. Кратчайшее расстояние между вершинами i и j равняется минимальной стоимости среди всех путей, ведущих от i до j, и обозначается как <math>d_{ij}^*</math>. Пусть <math>D^* = {d_{ij}^*}</math>. Значение n называется размером матрицы.
Пусть дан ориентированный граф G = (V, E), где V = {1, ..., n} – множество вершин, а E – множество дуг. Стоимость дуги (i, j) <math>\in</math> E обозначается как <math>d_{ij}\, </math>. Матрица D размера <math>n \times n</math> содержит элемент <math>d_{ij}\, </math> в позиции (i, j). Для простоты предположим, что <math>d_{ij} > 0 \, </math> и <math>d_{ii} = 0 \, </math> для всех i <math>\ne</math> j. Если не существует дуги из i в j, положим <math>d_{ij} = \infty</math>. Стоимость, или расстояние, пути представляет собой сумму стоимостей всех дуг на пути. Длина пути равна количеству дуг на пути. Кратчайшее расстояние между вершинами i и j равняется минимальной стоимости среди всех путей, ведущих от i до j, и обозначается как <math>d_{ij}^*</math>. Пусть <math>D^* = {d_{ij}^*}</math>. Значение n называется размером матрицы.


Пусть A и B – матрицы (n, n). Умножение матриц A и B может производиться одним из трех способов: (1) Обычное матричное произведение над кольцом <math>C = AB</math>; (2) булево произведение матриц <math>C = A \cdot B</math>; (3) произведение матриц расстояния <math>С = A \times B</math>, где
Пусть A и B – матрицы (n, n). Умножение матриц A и B может производиться одним из трех способов:
(1) Обычное матричное произведение над кольцом <math>C = AB \, </math>; (2) булево произведение матриц <math>C = A \cdot B</math>; (3) произведение матриц расстояния <math>С = A \times B</math>, где


(1) <math>c_{ij} = \sum_{k=1}^n a_{ik} b_{kj}</math>
(1) <math>c_{ij} = \sum_{k=1}^n a_{ik} b_{kj}</math>
Строка 11: Строка 12:
(2) <math>c_{ij} = \bigvee_{k=1}^n a_{ik} \wedge b_{kj}</math>
(2) <math>c_{ij} = \bigvee_{k=1}^n a_{ik} \wedge b_{kj}</math>


(3)
(3) <math>c_{ij} = min_{k=1}{a_{ik} + b_{kj}}</math>


В любом из трех случаев матрица C называется произведением, а процесс вычисления – умножением. Во всех трех случаях k пробегает весь диапазон (1, …, n}. Частичное произведение матриц A и В определяется для значений k из подмножества I множества V. Иными словами, частичное произведение получается при умножении вертикальной прямоугольной матрицы A(*, I), столбцы которой извлечены из матрицы A согласно множеству I, и горизонтальной прямоугольной матрицы B(I, *), полученной из B путем извлечения строк, соответствующих множеству I. Интуитивно множество I представляет собой множество контрольных точек k при переходе от i к j в графе.
В любом из трех случаев матрица C называется произведением, а процесс вычисления – умножением. Во всех трех случаях k пробегает весь диапазон (1, …, n}. Частичное произведение матриц A и В определяется для значений k из подмножества I множества V. Иными словами, частичное произведение получается при умножении вертикальной прямоугольной матрицы A(*, I), столбцы которой извлечены из матрицы A согласно множеству I, и горизонтальной прямоугольной матрицы B(I, *), полученной из B путем извлечения строк, соответствующих множеству I. Интуитивно множество I представляет собой множество контрольных точек k при переходе от i к j в графе.
4430

правок