Скачиваний:
53
Добавлен:
14.06.2020
Размер:
3.42 Mб
Скачать

Алгоритм

Джонсона

Алгоритм Джонсона — позволяет найти кратчайшие пути между всеми парами вершин взвешенного ориентированного графа.

Данный алгоритм работает, если в графе содержатся рёбра с положительным или отрицательным весом, но отсутствуют циклы с отрицательным весом. (Назван в честь Д. Б. Джонсона, опубликовавшего алгоритм в 1977 году).

В этом алгоритме используется метод изменения веса.

Суть его заключается в том, что для заданного графа G строится новая весовая функция , неотрицательная для всех ребер графа G и сохраняющая кратчайшие пути.

Такая весовая функция строится с помощью так называемой потенциальной функции

.

Когда, веса всех ребер неотрицательны, и кратчайшие пути сохранятся, можно запустить алгоритм Дейкстры из каждой вершины и, таким образом, найти кратчайшие расстояния между всеми парами вершин

Задача о кратчайшем пути - задача поиска самого короткого пути (цепи) между двумя точками (вершинами) на графе, в которой минимизируется сумма весов ребер, составляющих путь.

ПОСТАНОВКА ЗАДАЧИ: Дано

Имеется n деталей и два станка. Каждая деталь должна сначала пройти обработку на первом станке («А»), затем — на втором («В»).

При этом i-ая деталь обрабатывается на первом станке за ai времени, а на втором — за bi времени.

Каждый станок в каждый момент времени может работать только с одной деталью.

Требуется: составить такой порядок подачи деталей на

станки, чтобы итоговое время обработки всех деталей было бы минимальным

Эта задача называется иногда задачей двухпроцессорного обслуживания задач, или задачей Джонсона (по имени S.M. Johnson, который в 1954 г. предложил алгоритм для её решения).

Если количество станков больше двух, эта задача становится NP-полной (как доказал Гэри (Garey) в 1976 г.).

Построение алгоритма

Можно считать, что порядок обработки деталей на первом и втором станках должен совпадать.

В самом деле, т.к. детали для второго станка становятся доступными только после обработки на первом, а при наличии нескольких доступных для второго станка деталей время их обработки будет равно сумме их независимо от их порядка — то выгоднее всего отправлять на второй станок ту из деталей, которая раньше других прошла обработку на первом станке.

Построение алгоритма

Рассмотрим порядок подачи деталей на станки, совпадающий с их входным порядком:

Для первой детали мы имеем: x1=a1

Для второй — т.к. она становится готовой к отправке на второй станок в момент времени a1+a2

торой станок освобождается в момент времени x1+b1