Научная статья на тему 'Решение задачи о поиске кратчайших путей на полном графе из пяти вершин средствами аналитических функций и функций работы с массивами Microsoft Excel'

Решение задачи о поиске кратчайших путей на полном графе из пяти вершин средствами аналитических функций и функций работы с массивами Microsoft Excel Текст научной статьи по специальности «Математика»

CC BY
5698
516
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ДИСКРЕТНАЯ МАТЕМАТИКА / ТЕОРИЯ ГРАФОВ / АЛГОРИТМ ДЕЙКСТРЫ / ДЕРЕВО КРАТЧАЙШИХ ПУТЕЙ / ВЕРШИНА / РЕБРО / ПОСТОЯННАЯ

Аннотация научной статьи по математике, автор научной работы — Баранова В. А.

В статье рассматривается один из вопросов дискретной математики. Описывается реализация алгоритма Дейкстры нахождения кратчайшего расстояния от одной из вершин графа до всех остальных (о поиске дерева кратчайших путей) на полном неориентированном графе с помощью функций Microsoft Excel.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Решение задачи о поиске кратчайших путей на полном графе из пяти вершин средствами аналитических функций и функций работы с массивами Microsoft Excel»

УДК 519.854

В.А. Баранова,

старший преподаватель Омский институт (филиала) РГТЭУ e-mail: nauka_oirgteu@mail.ru

РЕШЕНИЕ ЗАДАЧИ О ПОИСКЕ КРОТЧАЙШИХ ПУТЕЙ НА ПОЛНОМ ГРАФЕ ИЗ ПЯТИ ВЕРШИН СРЕДСТВАМИ АНАЛИТИЧЕСКИХ ФУНКЦИЙ И ФУНКЦИЙ РАБОТЫ С МАССИВАМИ MICROSOFT EXCEL

В статье рассматривается один из вопросов дискретной математики. Описывается реализация алгоритма Дейкстры нахождения кратчайшего расстояния от одной из вершин графа до всех остальных (о поиске дерева кратчайших путей) на полном неориентированном графе с помощью функций Microsoft Excel.

Ключевые слова: дискретная математика, теория графов, алгоритм Дейкстры, дерево кратчайших путей, вершина, ребро, постоянная.

Теория графов - это важный раздел дискретной математики, практическая роль которой возросла за счёт развития вычислительной техники дискретного действия, в теоретическом плане, помимо связей с комбинаторикой и геометрией, наметились сдвиги на стыке теории графов с алгеброй, математической логикой.

Методы теории графов часто используются при решении задач технического и экономического характера. Теория графов находит применение, например, в геоинформационных системах (ГИС). Существующие или вновь проектируемые дома, сооружения, кварталы и т.

п. рассматриваются как вершины, а соединяющие их дороги, инженерные сети, линии электропередачи и т. п. - как рёбра. Вычисления, производимые на таком графе, позволяют решать различные задачи оптимизации.

Известные в теории графов алгоритмы решения достаточно сложны в плане вычислений, громоздки и процесс решения требует предельной концентрации внимания. Поэтому на практике преподаватель обычно ограничивается рассмотрением одного примера задачи, предоставляя студентам самостоятельно решить предлагаемый вариант.

Проблема возникает тогда, когда решение студента надо проверить, или, что ещё важнее, найти ошибку в его вычислениях, которая привела к неверному ответу. Поэтому преподаватели стараются ограничить число вариантов, а это приводит к, мягко говоря, коллективным работам вместо индивидуальных (самостоятельных).

Таким образом, становится желательным без специального программного обеспечения реализовывать алгоритмы теории графов, чтобы получать правильные решения при неограниченном количестве вариантов.

В качестве широко распространённой системы, которую можно применять для реализации алгоритмов теории графов без навыков программирования, предлагается использовать табличный процессор Microsoft Excel.

Возможность решения задач теории графов средствами Microsoft Excel подтверждается многими исследователями. Среди них С.В. Скороход, предложивший оптимизационную модель задачи поиска кротчайшего пути [6], И.Н. Ревчук, В.К. Пчельник, реализовавшие решение задачи построения минимального покрывающего дерева [3], [4], А.В. Ленников, занимающийся решением задач оптимизации [2].

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

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

При решении задачи о поиске дерева кратчайших путей связи считаются неориентированными. Рёбра графа характеризуется некоторой величиной - длиной ребра (которую можно понимать как вес связи по данному ребру). Например, применительно к городским улицам длиной ребра может быть время, которое требуется для проезда. В электрической сети длиной ребра может быть величина потерь напряжения или мощности при прохождении тока через данную линию. При строительстве магистральных дорог длиной дуги можно считать затраты на строительство соответствующего участка магистрали. Таким образом, решение задачи о поиске дерева кратчайших путей имеет широкое применение с точки зрения экономики.

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

Алгоритм Дейкстры поиска кратчайшего пути [5,11-12] основан на присвоении каждой вершине временных меток, которые на каждом шаге с

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

Метка состоит из двух чисел и обозначается ^(^, j). Первое число d(i) характеризует расстояние от стартовой вершины S к вершине i на некотором пути, второе число j - номер предыдущей вершины на этом пути.

В постоянной метке d(i) - кратчайшее расстояние от вершины S к вершине ^ а j - номер предыдущей вершины на кратчайшем пути от стартовой вершины S к вершине ь Постоянная метка обозначается ^^)+, ]).

Начальный шаг (присвоение начальных меток).

Полагаем стартовой вершиной Б любую из вершин графа. Длину пути до стартовой вершины считаем равной нулю d(S)=0 и считаем метку этой вершины постоянной. Для всех остальных вершин графа полагаем длину пути бесконечно большой ё(1)=да и считаем метки этих вершин временными. Принимаем в качестве ведущей стартовую вершину P=S и длину пути до ведущей вершины устанавливаем равной длине пути до стартовой вершины ё(Р)=0.

Циклический шаг (обновление меток, выбор постоянной метки).

Рассмотрим все вершины, смежные с вершиной Р, у которых метки являются временными. Для этих вершин первое число метки обновляем по формуле:

Выбор происходит между длиной пути к рассматриваемой вершине 1, полученной на предыдущей итерации на каком-то пути, и длиной пути, которая получится, если путь будет проходить через ведущую вершину Р. Второе число метки заменяется номером вершины Р, если первое число метки d(i) изменилось (обновилось). Среди всех вершин с временными

(1)

метками находим вершину, у которой первое число метки d(i) является наименьшим. Пусть такой будет вершина с номером k, т.е.

d(k) = min efl(i) (2)

i '

Считаем метку этой вершины постоянной и полагаем: P=k, d(P)=d(k).

Аналитический шаг (дерево решения).

Если все вершины имеют постоянные метки, то поиск закончен. В противном случае следует перейти к циклическому шагу.

Первые числа в метках характеризуют кратчайшие расстояния от стартовой вершины S к соответствующей вершине i. Вторые числа в метках указывают номер предыдущей вершины на кратчайшем пути, т.е. на вершину, которая соединена ребром с рассматриваемой вершиной i. Построение кратчайшего пути от стартовой вершины S к некоторой вершине i осуществляется, начиная с этой вершины i по ребру, которым данная вершина соединена с предшествующей j. Ребра всех кратчайших путей образуют покрывающее дерево кратчайших путей. Д

Приведённый выше алгоритм можно реализовать в программе Microsoft Excel для полного графа с любым количеством вершин.

Будем считать, что дан полный граф (т.е. любые две его вершины

соединены ребром) на пяти вершинах. Для определённости, рассмотрим

пример с заданной матрицей длин рёбер L.

х 4 9 6 11

4 х 3 2 8

Z= 9 3x71

6 2 7 x8

11 8 1 8 х

V

На рабочем листе необходимо ввести элементы матрицы длин ребёр Ь (рис. 1). Учитывая, что граф не ориентированный (т.е. матрица симметрична) можно применять ссылки на элементы, симметричные относительно главной диагонали матрицы.

Например, в ячейке В3 записать формулу: «=С2».

і

2

3

4

5

6

Е

а

6

Рисунок 1. Условие задачи Для реализации алгоритма решения задачи о дереве кратчайших путей следует оформить расчётную таблицу (рис. 2). Первый столбец таблицы (Ь) предназначен для номера ведущей вершины. Второй столбец таблицы (М) предназначен для фиксирования длины кратчайшего пути до ведущей вершины. В ячейках заголовка таблицы: 01, Р1, Б1, и1, '1 содержатся номера вершин графа.

Каждая клетка основной части таблицы решения предназначена для метки и содержит 2 ячейки: для первого числа метки - расстояния от ведущей вершины до рассматриваемой ё(1) и для второго числа метки -номера предшествующей вершины ]. В ячейке N10 вводим число ноль, определяя, таким образом, в качестве стартовой вершины первую и устанавливая нулевую длину пути до стартовой вершины. В ячейках заголовка таблицы: Р1, Я1, Т1, VI следует ввести любой символ, который будет символизировать бесконечно большое расстояние до остальных вершин графа.

|_ М N О р а К 5 т и V \Л/

її р с! 0 1 - 2 - 3 - 4 - 5

2

3

4

5

6

Рисунок 2. Расчётная таблица решения

Решение задачи сводится к применению формул с использованием следующих функций Microsoft Excel.

Функция МИН(число1;число2; ...) возвращает наименьшее значение в списке аргументов. Для решения важным является то, что если аргументы не содержат чисел, функция МИН возвращает значение 0.

•Аргументы «число1», «число2», ... от 1 до 255 чисел, среди которых требуется найти наименьшее.

Функция

ЕСЛИ(лог_выражение;значение_если_истина;значение_если_ложь) используется при проверке условий для значений и формул. Она возвращает одно значение, если заданное условие при вычислении дает значение ИСТИНА, и другое значение, если заданное условие при вычислении дает значение ЛОЖЬ.

•Аргумент «лог_выражение» - это любое значение или выражение, принимающее значения ИСТИНА или ЛОЖЬ.

•Аргумент «значение_если_истина» - значение (может быть формулой), которое возвращается, если аргумент «лог_выражение» имеет значение ИСТИНА.

•Аргумент «значение_если_ложь» - значение (может быть формулой), которое возвращается, если «лог_выражение» имеет значение ЛОЖЬ.

Функция СМЕЩ(ссылка;смещ_по_строкам;смещ_по_столбцам)

возвращает содержание ячейки, отстоящий от указанной ячейки на заданное число строк и столбцов.

•Аргумент «ссылка» - это адрес ячейки, от которой начинается смещение.

•Аргумент «смещ_по_строкам» указывает количество строк, которые требуется отсчитать вверх или вниз, чтобы получить нужную ячейку.

•Аргумент «смещ_по_столбцам» указывает количество столбцов, которые требуется отсчитать влево или вправо, чтобы получить нужную ячейку.

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

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

Например, в ячейке М2 должна быть формула: «=МИН(Ш;Р1^1;Т1;У1)»

Ф Для автоматического определения номера ведущей вершины следует записать функцию сравнения фиксированной длины пути и длины пути до каждой из вершин.

Например, в ячейке Ь2 должна быть формула:

«=ЕСЛИ(Ш=$М2;1;ЕСЛИ(Р1=$М2;2;ЕСЛИ^1=$М2;3;ЕСЛИ(Т1

=$М2;4;5))))»

Смысл формулы.

Если первое число какой-либо метки, полученной на предыдущей итерации, для каждой из вершин равно фиксированной длине пути, записанной в ячейке M2, то в ячейку Е2 записывается номер этой вершины, которая становится ведущей (1 или 2 или 3 или 4 или 5).

© Для автоматического вычисления первой части метки (минимального расстояния до рассматриваемой вершины на некотором пути) следует ввести формулу, которая будет выполнять выбор длины пути до рассматриваемой вершины, при этом выполняя проверку условия о том, не была ли метка зафиксирована ранее, на предыдущей итерации.

Например, в ячейке N2 должна содержаться формула, выполняющая сравнение с длиной пути, полученной на предыдущей итерации: «=ЕСЛИ(((М=$М2)*^2=0$1)+(№=М+М));М+М;МИН(Ш; СМЕЩ($А$1^2;0$1)+$М2))»

Смысл формулы.

Если первое число метки, полученной на предыдущей итерации, записанное в ячейке N1,

совпадает с длиной пути до ведущей вершины, записанной в ячейке M2, и номер ведущей вершины, записанный в ячейке L2 совпадает с номером рассматриваемой вершины, записанной в ячейке 01, либо путь до вершины был зафиксирован ранее, т.е. установлен знак «+» в ячейке N1, то следует зафиксировать путь и сделать записать в ячейку N2 знак «+». Иначе в ячейку N2 необходимо поместить минимум из 2-х чисел: (1) длины некоторого пути до рассматриваемой вершины, полученной на предыдущей итерации, записанной в качестве первого числа метки в ячейке N1 и (2) новой длины пути, которая получится в случае, если путь будет проходить через ведущую вершину, т.е. при сложении (а) длины ребра от ведущей вершины, записанной в ячейке L2, к рассматриваемой, записанной в ячейке 01 (полученной функцией смещения от ячейки А1 по матрице длин ребер) и (Ь) фиксированной длины пути до ведущей вершины, записанной в ячейке М2.

Аналогичные формулы должны быть в ячейках: P2, Я2, T2, V2. Наличие в приведённой формуле абсолютных и смешанных ссылок (фиксирующих адрес ячеек) позволяет получить эти формулы, применяя копирование ячеек.

«=ЕСЛИ(((P1=$M2)*($L2=Q$1)+(P1-,+"));"+";МИН(P1;

СМЕЩ^$ 1^2^$1 ^Ш))»

«=ЕСЛИ(((R1=$M2)*($L2=S$1)+(R1="+"));"+";МИН(R1; СМЕЩ($А$ 1 ^2^$1)+$М2))»

«=ЕСЛИ(((Т1=$М2)*^2=Ш$1)+(Т1="+"));"+";МИН(Т1; СМЕЩ($А$ 1 ;$L2;U$1)+$M2))»

«=ЕСЛИ(((V1=$M2)*($L2=W$1)+(V1="+"));"+";МИН(V1; СМЕЩ($A$ 1 ;$L2;W$ 1 )+$M2))»

© Для автоматического вычисления второй части метки (номера предшествующей вершины на кратчайшем пути) следует ввести формулу, которая будет выполнять обновление номера предшествующей вершины при изменении значения первой метки.

Например, в ячейке 02 должна содержаться формула, выполняющая сравнение первой части метки с первой частью метки на предыдущей итерации.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

«=ЕСЛИ(Ш=Ш;01;ЕСЛИ(Ш<>"+М^2;ММ))»

Смысл формулы.

Если длина пути, полученная на предыдущем итерации, записанная в ячейке N1, совпадает с длиной пути, записанной в ячейке N2, то номер предшествующей вершины сохраняется, в ячейку 02 записывается число из 01. Иначе, если метка не была зафиксирована, о чём свидетельствует «+» в ячейке N2, то в ячейку 02 записывается номер ведущей вершины из ячейки L2. Иначе (если метка зафиксирована) следует сделать ячейку 02 пустой.

Аналогичные формулы должны быть в ячейках: Q2, Б2, Ш, W2 (их можно получить копированием ячеек).

«=ЕСЛИ(Р2=Р1 & 1 ;ЕСЛИ(Р2<>"+"^2;""))»

«=ЕСЛИ(R2=R1; S1 ;ЕСЛИ(К2<>"+"^2;""))»

«=ЕСЛИ(Т2=Т 1 ;Ш ;ЕСЛИ(T2<>"+";$L2;""))»

«=ЕСЛИ(V2=V1;W1;ЕСЛИ(V2<>"+";$L2;""))»

Результаты вычисления по формулам соответствуют следующим меткам в расчётной таблице: (4,1), (9,1), (6,1), (11,1) (рис. 3). Одна из этих

меток, с наименьшим первым числом, на следующей итерации будет восприниматься как постоянная (4+,1)

1_ М N О р а В Б т и V

1 Р с/ 0 1 - 2 - 3 - 4 - 5

2 1 0 + 4 1 9 1 6 1 11 1

3

4

5

6

Рисунок 3. Расчётная таблица после выполнения первой итерации Теперь надо только размножить формулы интервала ячеек Ь2^2 на ячейки, предназначенные для следующих итераций. Размножить формулы можно с помощью копирования или заполнения данными с помощью маркера заполнения, расположенного в правом нижнем углу выделенной области. Задача будет полностью решена (рис. 4).

1 1_ М N О Р а И 5 Т и V \Л/

її Р с/ 0 1 - 2 - 3 - 4 - 5

2 1 а + 4 1 9 1 6 1 11 1

3 2 4 + + 7 2 6 1 11 1

4 4 6 + + 7 2 + 11 1

5 3 7 + + + + 8 В

6 5 8 + + + + +

Рисунок 4. Решение задачи Результатом решения является полученный набор рёбер дерева кратчайших путей, которые следует перечислить на свободных строках рабочего листа и найти общую длину рёбер дерева кратчайших путей (рис.

5) І2 IГ 2 3 4 5

Рисунок 5. Возможный вариант записи ответа

Запись ответа тоже можно доверить формулам. Аналогичные формулы можно получить копированием (таб. 1). При этом ответ будет определяться автоматически.

Номер первой вершины каждого ребра «считывается» из заголовка расчётной таблицы. Номер второй вершины ребра записывается по результатам анализа соответствующего столбца вычислений предшествующей вершины для этого ребра в расчётной таблице. Длины рёбер получаются с помощью функции смещения по матрице длин рёбер исходных данных задачи.

Таблица 1. Формулы построения ответа по данным расчётной таблицы решения.

Имя ячейки Формула Аналогичные формулы

N12 =01 Р12, Ю2, Т12, У12

012 =ЕСЛИ(06<>"" ;06;ЕСЛИ(05<>"" ;05; ЕСЛИ(04<>"" ;04;ЕСЛИ(03<>"" ;03; ЕСЛИ(02<>"";02;01))))) 012, Б12, и12, W12

N13 =СМЕЩ($А$ 1;Ш2;012) Р13, Ю3, Т13, У13

Х13 =СУММ(Ш3:У13)

Изменение исходных данных (правая верхняя треугольная часть матрицы длин ребёр Ь) приводит к мгновенному ответу на поставленную задачу. Наблюдается устойчивость формул к ситуации с рёбрами равной длины (рис. 6).

А В С 0 £ Р К 1_ М N 0 р а И 5 т и V \Л/ X

1 2 1 Р с/ 0 1 - 2 - 3 - 4 - 5

X 4 9 6 4 1 0 + 4 1 9 1 6 1 4 1

3 4 X 3 2 8 2 4 + + 7 2 6 1 4 1

4 9 3 X 7 1 5 4 + + 5 5 6 1 +

5 6 2 7 X 8 3 5 + + + 6 1 +

6 4 8 1 8 X 4 6 + + + + +

11 Ответ

12 Рёбра: 11 21 35 41 51

13 Длины х + 4 + 1+ 6 + 4= 15

Рисунок 6. Решение задачи при равной длине рёбер (1,2) и (1,5) Кроме того, задача без проблем решается и при выборе в качестве стартовой любой другой вершины полного графа, например, второй (рис.

А В С 0 Е к) ь [м^ордкБтиу^! х

1 і КВ 3 ЕВ р с/ - 1 0 2 - 3 - 4 - 5

2 1 X 4 9 б 4 2 0 4 2 + 3 2 2 2 8 2

3 2 4 X 3 2 8 4 2 4 2 + 3 2 + 8 2

4 3 9 3 X 7 1 3 3 4 2 + + + 4 3

5 4 5 6 2 7 X 8 1 4 + + + + 4 3

6 4 8 1 8 X 5 4 + + + + +

11 Ответ

12 Рёбра: 12 22 32 42 53

13 Длины 4 + х + 3 + 2 + 1=10

Рисунок 7. Решение задачи, в качестве стартовой выбрана вершина 2 Формулы для решения аналогичной задачи на полном графе из шести, семи и т.д. вершин требуют незначительного преобразования, которые легко можно выполнить за несколько минут, исходя из логики алгоритма.

Таким образом, число вариантов задач для решения студентами можно увеличивать неограниченно. При этом всегда можно будет проверить ход решения и ответ.

Список литературы:

1. Баранова, В.А. Применение методики «частного случая» на практическом занятии по математике при изучении темы «Вычисление

площади фигуры, ограниченной графиками двух функций»/ В.А. Баранова// СТЭЖ. - 2011. - № 14. - С.5-10.

2. Леоненков, А.В. Решение задач оптимизации в среде MS Excel/ А.В. Леоненков. - Санкт-Петербург: BHV-СПб, 2005. - 704 с.

3. Пчельник, В.К. Исследование операций: Методические

рекомендации/ В.К. Пчельник, И.Н. Ревчук. - Гродно: ГрГУ им. Я. Купалы, 2010. - 104 с.

4. Ревчук, И.Н., Пчельник, В.К. Реализация алгоритма Прима в

электронных таблицах MS EXCEL. [Электронный ресурс]. - Режим доступа: http://www.rusedu.ru/detail_3396.html (28.11.11). - Название с

экрана.

5. Романовская А.М. Задачи оптимизации на графах: Учебное пособие/ А.М. Романовская. - Омск: Типография «С-Принт», 2007. - 89 с.

6. Скороход, С.В. Решение модельных оптимизационных задач на графах средствами Excel / С.В. Скороход// Исследовано в России. - 2006. -№ 155. - С. 1436-1445.

i Надоели баннеры? Вы всегда можете отключить рекламу.