- •Глава 16. Специальные циклы и метрика графов 345
- •Глава 17. Графовые инварианты 404
- •Введение
- •Цели и задачи преподавания дисциплины «дискретная математика»
- •Модуль 1. Основы Теории множеств (2 кредита)
- •Комплексная цель и задачи изучения модуля
- •Глава 1. Исчисление множеств
- •1.1. Понятие множества
- •1.2. Способы задания множеств
- •1.3. Подмножество
- •2. Пустое множество не имеет собственных и истинных подмножеств.
- •3. Одноэлементное множество имеет два подмножества - сaмo себя и , т.Е. Не имеет собственных подмножеств.
- •Множество – это многое, мыслимое как единое.
- •Глава 2. Операции над множествами
- •2.1. Объединение множеств
- •2.2. Пересечение множеств
- •2.3. Разность множеств
- •2.4. Дополнение множества
- •2.5. Тождества алгебры множеств
- •2.6. Доказательства тождеств с множествами
- •Глава 3. Упорядоченные множества
- •3.1. Кортеж (Упорядоченное множество)
- •3.2. Декартово произведение
- •3.3. Операция проектирования множеств
- •3.4. График
- •Декартово произведение множеств позволяет перейти к графическому представлению упорядоченных множеств.
- •Глава 4. Отношения
- •4.1. Основные понятия отношений
- •4.2. Основные свойства отношений
- •4.3. Операции над отношениями
- •4.4. Основные свойства специальных отношений
- •4.5. Разбиение множеств
- •4.6. Отношение порядка
- •Использование отношений позволяет строить модели взаимосвязей между любыми обьектами в природе.
- •5. Соответствия
- •5.1. Определение соответствия
- •5.2. Операции над соответствиями
- •5.3. Понятия образа и прообраза при соответствии
- •5.4. Доказательства тождеств с соответствиями
- •5.5. Основные свойства соответствий
- •5.6. Функция
- •Глава 6. Упорядоченные бесконечные множества
- •6.1. Основные сведения об упорядоченных бесконечных множествах
- •6.2. Проблема континуума
- •Глава 7. Основные понятия теории мультимножеств
- •7.1. Понятие мультимножества
- •7.2. Операции над мультимножествами
- •Возможность многократного вхождения элементов в мультимножество создает новое качество и позволяет расширить класс описываемых, анализируемых и синтезируемых математических объектов.
- •8. Нечеткие множества
- •8.1. Нечеткие высказывания
- •8.2. Операции над нечеткими множествами
- •8.3. Нечеткие отношения и соответствия
- •Тестовые задания к модулю 1
- •24. Множество называется графиком, если каждый его элемент ...
- •25. Соответствие может быть задано … способом.
- •Критерии оценки
- •Нечеткие и приближенные высказывания, множества, соответствия и отношения позволяют формально задавать расплывчатую информацию в виде, удобном для обработки на эвм.
- •Глоссарий к модулю 1
- •Глава 1.
- •Глава 2.
- •Глава 3.
- •Глава 4.
- •Глава 5.
- •Глава 6.
- •Глава 7.
- •Глава 8.
- •Галилей Модуль 2. Основы теории алгоритмов (1,5 кредита) Комплексная цель и задачи изучения модуля
- •Глава 9. Введение в теорию алгоритмов
- •9.1. Понятие алгоритма
- •9.2. Основные свойства алгоритмов
- •9.3. Классификация алгоритмов
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •10.1. Преобразование слов в произвольных абстрактных алфавитах
- •10.2. Числовые функции
- •10.3. Построение алгоритмов по принципу «разделяй и властвуй»
- •10.4. Представление алгоритма в виде детерминированного устройства
- •10.5. Универсальные схемы алгоритмов
- •10.5. “Жадные” алгоритмы
- •10.6. Нечеткие (расплывчатые) алгоритмы
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •11.1. Анализ алгоритмов
- •11.2. Сложность алгоритмов
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Тестовые задания к модулю 2
- •Критерии оценки
- •Модуль 3. Алгебра логики (1,5 кредита) Комплексная цель и задачи изучения модуля
- •Глава 12. Элементы алгебры логики
- •12.1. Логические функции
- •12.2. Основные логические тождества и законы
- •12.3. Булевы функции одной и двух переменных
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •13.1. Дизъюнктивная и конъюнктивная нормальные формы
- •13.2. Способы перехода от нормальных к совершенным нормальным формам
- •2. Графический способ.
- •13.4. Функциональная полнота бф
- •13.3. Алгебра Жегалкина
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •14.1. Реализация булевых функций
- •14.2. Минимизация булевых функций
- •14.3. Карты Карно
- •14.4. Метод Квайна - Мак-Класски
- •14.5. Переход от бф к простейшим комбинационным схемам
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Критерии оценки
- •Глоссарий к модулю 3
- •Модуль 4. Основы Теории графОв (2 кредита) Комплексная цель и задачи изучения модуля
- •Глава 15. Введение в теорию графов
- •15.1. Способы задания графов и виды графов
- •15.1.1. Способы задания графов
- •15.1.2. Виды графов
- •15.1.3. Нечеткие неориентированные графы
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •15.2. Маршруты, цепи, циклы
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •При моделировании систем модели и алгоритмы нахождения маршрутов, цепей, циклов, разрезов, связности графов позволяют строить эффективные алгоритмы преобразования графов.
- •15.3. Нахождение кратчайших маршрутов (цепей)
- •15.3.1. Алгоритм Форда
- •15.3.2. Алгоритм Дейкстры
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •Алгоритмы Форда и Дейкстры являются эффективным способом определения кратчайшей по стоимости цепи между двумя вершинами графа.
- •Глава 16. Специальные циклы и метрика графов
- •16.1. Эйлеровы и гамильтоновы цепи и циклы
- •16.1.1. Связь между эйлеровыми и гамильтоновыми графами
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •16.2. Алгоритмы построения гамильтонова цикла
- •16.2.1. Алгоритм Робертса ─ Флореса
- •16.2.2. Алгебраический метод
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •16.3. Задача о коммивояжере и алгоритмы ее решения
- •16.3.1. Алгоритм Хелда и Карпа
- •16.3.2. Геометрический метод решения
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •16.4. Расстояния на графах
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •16.5. Деревья
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •Глава 17. Графовые инварианты
- •17.1. Цикломатическое и хроматическое числа графа
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •17.2. Числа внутренней и внешней устойчивости графа
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •Числа внутренней и внешней устойчивости относятся к инвариантам графа. Они позволяют определить специальные группы вершин в графах.
- •17.3. Планарность графов
- •17.3.1. Плоские и планарные графы
- •17.3.2. Эвристики для определения планарности
- •17.3.3. Минимизация пересечений ребер графов
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •17.4. Ориентированные графы
- •17.4.1. Способы задания
- •17.4.2. Решение стандартных графовых задач с использованием орграфов
- •17.4.3. Выделение сильносвязных компонент
- •17.4.4. Нечеткие ориентированные графы
- •Примеры решения задач
- •Вопросы
- •Задания для самостоятельной работы
- •175 Гиперграфы
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •Тестовые задания к модулю 4
- •Критерии оценки
- •Глоссарий к модулю 4 Глоссарий к главе 1
- •Глоссарий к главе 2
- •Глоссарий к главе 3
- •Библиографический комментарий
- •Литература
- •Заключение
- •Приложение 1
- •Учебное издание Гладков Леонид Анатольевич, Курейчик Владимир Викторович, Курейчик Виктор Михайлович
Примеры решения задач
Пример 1. Для графа G = (X, U), изображённого на рис. 16.30, записать матрицу расстояний и список расстояний.
Рис. 16.30. Граф G
Решение: запишем матрицу расстояний для заданного графа.
Матрица расстояний будет иметь вид:
.
Таким образом, первая часть задания выполнена. Теперь построим список расстояний. Его можно записать следующим образом:
D = {<1,2,1>;<1,3,1>;<1,4,2>;<2,3,2>;<2,4,1>;<3,4,1>}.
Пример 2. Для графа G = (X,U), заданного на рис. 16.31, построить его отображение в координатную решётку и матрицу геометрии. Подсчитать суммарную длину рёбер L(G) графа, отображённого в координатную решётку.
Рис. 16.31. Граф G
Решение: после отображения в координатную решётку графа G получим граф Gr, показанный на рис. 16.32.
Рис. 16.32. Отображение графа G в координатную решетку
Теперь для полученного графа Gr запишем матрицу геометрии. Как уже говорилось ранее, матрица геометрии получается путём перемножения матрицы расстояний D и матрицы смежности:
.
В результате перемножения матриц мы получили матрицу геометрии D. Сумма элементов данной матрицы равна 24. Следовательно, суммарная длина рёбер L(G) графа Gr равна 12.
Вопросы для самоконтроля
1. Что такое метрика графа?
2. Как определяется расстояние между двумя вершинами графа?
3. Каким образом формируется матрица расстояний?
4. В чем состоит отличие между матрицей расстояний и матрицей геометрии?
5. Каким образом определяется диаметр графа?
6. Каким образом граф отображается в координатную решетку?
7. Как построить список расстояний?
8. Как определяется радиус графа?
9. Что такое число протяженности?
10. Каким образом определяется расстояние между узлами решетки?
Задания для самостоятельной работы
1. Для графа G = (X, U) построить матрицу и список расстояний.
2. Для произвольного графа G = (X, U) построить его отображение в координатную решетку Gr, матрицу расстояний, матрицу геометрии, а также подсчитать суммарную длину ребер.
3. Для произвольного графа определить диаметр и радиус графа.
4. Для произвольного графа определите центр графа.
5. Определите в произвольном графе G длиннейшие простые цепи и число протяженности.
6. Постройте произвольный граф на 10 вершин, отобразите его в решетку и определите расстояние между его вершинами.
7. Постройте словесный алгоритм определения матрицы геометрии.
8. Запишите псевдокод алгоритма определения матрицы геометрии.
9. Приведите структурную схему алгоритма определения матрицы геометрии по рисунку графа.
10. Приведите словесный алгоритм отображения графа в координатную решетку.
Понятия расстояния в графе, а также связанные с ним понятия метрики графа, длины цепи, матриц расстояний и геометрии являются базовыми понятиями при решении широкого круга оптимизационных задач, связанных с топологией графа.
16.5. Деревья
Связный граф без циклов называется деревом и обозначается T = (X, U), |X| = n. Любое дерево T имеет n – 1 ребро. Начальная вершина называется корнем, из которого выходят ребра – ветви дерева. Очевидно, что в дереве любые две вершины xi, xj связаны единственной цепью. В любом связном графе G можно выделить произвольное дерево Т. В любом дереве порядка n 2 имеется не менее двух концевых вершин.
Теорема 16.8. Пусть Т – граф из n вершин. Следующие утверждения эквивалентны:
Т является деревом,
Т не содержит циклов и имеет n – 1 ребер,
Т связен и имеет n – 1 ребер,
Т связен и каждое его ребро является мостом,
любые две вершины графа Т соединены ровно одной простой цепью,
Т не содержит циклов, но, добавляя к нему любое новое ребро, получаем ровно один цикл.
Для задач конструкторского и технологического проектирования наибольший интерес представляют деревья, у которых число вершин равно числу вершин графа, из которого выделено это дерево. Такие деревья называются покрывающими (ПД) или остовными. На рис 16.33 показан полный граф K4 и все его 16 ПД.
1-й
ряд
2-й ряд
3-й ряд
4-й ряд
Рис. 16.33. Граф K4 и его покрывающие деревья
Отметим, что здесь всего 4 различных покрывающих дерева. Остальные графы в каждом ряду одинаковые, только нарисованы по-разному.
В связном графе G удаление одного ребра, принадлежащего некоторому выбранному циклу, не нарушает связности оставшегося графа. Можно применять эту процедуру до тех пор, пока в G не останется ни одного цикла. В результате получим дерево, связывающее все вершины G. Оно является остовным (покрывающим) деревом или остовом или каркасом графа.
Граф, в котором число ребер не меньше чем число вершин, содержит цикл. Число ребер m произвольного графа G = (X, U), |X| = n, |U| = m, которые необходимо удалить для получения каркаса, не зависит от последовательности их удаления.
Например, на рис. 16.34, а показан граф G, а на рис. 16.34, б его каркас (остовное дерево).
а б
Рис. 16.34. Граф G (а) и его остовное дерево (б)
Утверждение 16.4. Всякий ациклический подграф G’ = (X’, U’) произвольного графа G = (X, U), X’ X, U’ U содержится в некотором каркасе O графа G (O = (X, U’), G = (X, U), U’ U).
Утверждение 16.5. Если O1 = (X1, U1) и O2 = (X2, U2) два каркаса графа G = =(X, U) (X = X1 = X2, U1 U, U2 U), то для любого ребра ui U1 графа O1 существует такое ребро uj U2 графа O2, что граф O1 - ui + uj также является каркасом. Например, имеем граф G (рис. 16.35, а) и два каркаса этого графа O1 (рис. 16.35, б) и O2 (рис. 16.35, в). Пусть ребро ui = u3,4, а ребро uj = u5,6, ребро ui U1 графа O1 и ребро uj U2 графа O2. Тогда граф O1 - ui + uj = O1 - u3,4 + u5,6 также будет каркасом (рис. 16.35, г).
а б
в г
Рис. 16.35. Граф G и его каркасы
Теорема 16.9 (Кэли). Существует ровно nn-2 различных помеченных деревьев с n вершинами.
Следствие 16.1. Число остовных деревьев в Kn равно nn-2.
Множество деревьев графа называется лесом. На рис. 16.36 показан лес, состоящий из 3 деревьев T1 - T3.
Рис. 16.36. Множество деревьев графа
Задачи выделения эйлеровых и гамильтоновых циклов и покрывающих деревьев связаны с задачами о лабиринте, коммивояжере и с построением цепей, циклов, маршрутов минимальной стоимости.
Задача о лабиринте в терминах теории графов формулируется как задача отыскания в связном графе G = (X, U) такого маршрута, который начинается в заданной вершине xi X и приводит в искомую вершину xj X, причем маршрут должен содержать кратчайшее число ребер.
Пусть нам необходимо проложить сеть проводов, связывающих n терминалов вычислительной аппаратуры, причем так, чтобы из одного терминала можно было связаться с любым другим. Если из экономических соображений требуется, чтобы количество затраченного провода было минимально, то граф, вершины которого соответствуют терминалам, а ребра соединяющим их проводам, должен быть деревом. Задача состоит в определении одного из nn-2 возможных деревьев, соединяющих терминалы, с минимизацией числа проводов. На языке теории графов эту задачу можно сформулировать следующим образом. Пусть G = (X, U) связный граф и каждому ребру ui U ставится в соответствие некоторое неотрицательное (ui), называемое его мерой или весом. Необходимо найти алгоритм построения покрывающего дерева Т, у которого сумма мер, взятая по всем ребрам, минимальна. Такие деревья будем называть кратчайшими покрывающими деревьями (КПД). Графы с весами на ребрах или вершинах будем называть взвешенными.
Запишем алгоритм Краскала для построения кратчайшего покрывающего дерева.
1. Пусть задан граф G = (X, U), для которого нужно построить кратчайшее покрывающее дерево. Строим граф G1 = Oп + u1, присоединяя к пустому графу Oп на множестве вершин X ребро u1 U минимального веса.
2. Если граф Gi уже построен и i < n – 1, то строим граф Gi+1 = Gi + ui+1,
где ui+1 – ребро графа G, имеющее минимальный вес среди ребер, не входящих в Gi и не составляющих циклов с ребрами из Gi. При i = n – 1, переход к пункту 3.
3. Конец работы алгоритма.
Теорема 16.10. При i < n – 1 граф Gi+1 можно построить. Граф Gn-1 является каркасом с минимальным весом ребер в графе G.
Например, пусть задан граф с G весами на ребрах (рис. 16.37).
а б
Рис. 16.37. Взвешенный граф G(а); каркас графа G (б)
Согласно алгоритму Краскала выбираем сначала ребро u1,4 с весом 1. Далее берем ребро u1,5 с весом 1. Затем среди оставшихся ребер с минимальным весом есть ребро u4,5, однако оно не пригодно для каркаса, т.к. образует цикл с ребрами u1,4 и u1,5. Далее выбираем ребра u3,6 и u5,6 с весом 2. Итак, каркас с минимальным весом равным 8 построен (рис. 16.37, б)
Приведем логическую схему алгоритма (ЛСА) Краскала решения данной задачи:
A0A121A2p11p22Aк,
здесь А0 – оператор начала;
А1 – оператор, устанавливающий i = 1;
А2 – оператор, выбирающий ребро ui с наименьшим весом;
р1 – проверка логического условия несовпадения ребра ui с предыдущим и необразования цикла с предыдущими ребрами. При p1 = 0, i = i + 1 переход к A2, при p1 = 1 переход к p2;
p2 – проверка логического условия, что мощность выбранных ребер равна n – 1. При p2 = 0, i = i + 1 переход к А2, при p2 = 1 переход к Ак;
Ак – оператор конца алгоритма.
Опишем алгоритм Прима построения кратчайшего покрывающего дерева (КПД) на взвешенном по ребрам графе. Алгоритм основан на разрастании поддеревьев. Дерево T’ = (X’, U’) является поддеревом T = (X, U), если X’ X, U’ U. Причем поддерево T’ может состоять и из одной вершины. Поддерево Т’ последовательно разрастается за счет прибавления ребер (xi, xj), (xi T, xj T’). Каждое добавляемое ребро должно иметь наименьший вес. Процесс продолжается, пока число ребер в T’ не станет равным n – 1. Покажем работу алгоритма на построении кратчайшего покрывающего дерева в графе G. Пусть граф задан матрицей смежности:
|
|
1 |
2 |
3 |
4 |
5 |
6 |
|
R = |
1 |
0 |
5 |
8 |
0 |
37 |
0 |
. |
2 |
5 |
0 |
0 |
7 |
10 |
0 |
||
3 |
8 |
0 |
0 |
3 |
0 |
0 |
||
4 |
0 |
7 |
3 |
0 |
11 |
20 |
||
5 |
37 |
10 |
0 |
11 |
0 |
12 |
||
6 |
0 |
0 |
0 |
20 |
12 |
0 |
Выбираем вершину x1 и считаем ее на первом шаге поддеревом T’ = (X’, U’), X’ = {x1}, U’ = . Строим упорядоченный список ребер, инцидентных вершине x1. Упорядочивание производится по возрастанию веса ребер.
|
ui |
(ui) |
|
L= |
(1, 2) |
5 |
. |
(1, 3) |
8 |
||
(1, 5) |
37 |
Из списка выбирается ребро (1, 2) (т.е. (x1, x2)). Производится разрастание поддерева T’ = (X’, U’), X’ = {x1, x2}, U’ = {(1, 2)}. В список L вносятся ребра, инцидентные вершине x2. После этого ребра снова упорядочиваются, и список примет вид
|
ui |
(ui) |
|
|
(2, 4) |
7 |
. |
L= |
(1, 3) |
8 |
|
|
(2, 5) |
10 |
|
|
(1, 5) |
37 |
Выбирается ребро (2, 4) с наименьшим весом и добавляется к поддереву T’, если оно не образует цикла с ребрами T’. Остальные ребра, объединяющие вершины X’ между собой, удаляются из L; X’ = {x1, x2, x4}, U’ = {(1, 2), (2, 4)}. Проверяется |X’| = |X|, если нет, то выбирается вершина x4 и ребра, инцидентные ей, пополняют список L:
|
ui |
(ui) |
|
|
(4, 3) |
3 |
. |
|
(1, 3) |
8 |
|
L= |
(2, 5) |
10 |
|
|
(4, 5) |
11 |
|
|
(4, 6) |
20 |
|
|
(1, 5) |
37 |
Продолжая, получаем U’ = {(1, 2), (2, 4), (4, 3), (2, 5), (5, 6)}, |X| = |X’|, процесс окончен, 1n-1(ui) = 32. На рис. 16.38 кратчайшее покрывающее дерево показано жирными линиями.
Рис. 16.38. Исходный граф G и его кратчайшее покрывающее дерево
Алгоритмы построения покрывающих деревьев с минимальной суммарной длиной ребер на взвешенных графах основаны на двух принципах:
каждая изолированная вершина соединяется с ближайшей соседней;
каждое изолированное поддерево соединяется с ближайшей соседней вершиной (или поддеревом) кратчайшим ребром (или цепью).
Задача построения КПД усложняется, если при соединении множества вершин (контактов цепи) разрешается использование дополнительных точек соединения. В общем виде данная задача формируется так: для заданных x1, x2, ..., xn точек плоскости построить КПД с n’ n вершинами — и называется задачей Штейнера (ЗШ). Обычно решение ЗШ рассматривают в областях прямоугольной конфигурации. Для n 5 известно решение ЗШ, в общем же случае известны условия, которым должны удовлетворять деревья Штейнера (ДШ) и эвристические алгоритмы. Дополнительные точки, вводимые при построении КПД, называют точками Штейнера (ТШ).
Приведем ряд лемм, полученных Фридманом и Меноном, дающих необходимые условия существования и построения ДШ.
Лемма 16.1. Для n вершин, которые должны быть соединены между собой, всегда можно построить ДШ, в котором каждая ТШ gi соединена по крайней мере с тремя другими.
Лемма 16.2. Для множества вершин {x1, x2, x3}, которые должны быть соединены, координаты ТШ g, минимизирующей 3i = 1 d(g, ni), будут Sср, Тср и справедливо выражение 3i = 1 d(g, ni) = 1/2 P(x1, x2, x3), где Sср, Тср – средние значения Si (i = 1, 2, 3) и Tj (j = 1, 2, 3); P(x1, x2, x3) – длина периметра прямоугольника, построенного на вершинах x1, x2, x3; d(g, ni) – прямоугольное расстояние между g и ni.
На рис. 16.39 показан пример, иллюстрирующий условия леммы 16.2 при построении ДШ, соединяющего вершины x1, x2, x3. Точка Штейнера g имеет координаты Sg = 3,Tg = 5.
Рис. 16.39. Построения дерева Штейнера
Лемма 16.3. Дано ДШ, состоящее из xi точек плоскости. Пусть ТШ g соединена только с тремя вершинами x1, x2, x3. Тогда g находится внутри прямоугольника, построенного на вершинах x1, x2, x3, и ТШ единственная.
Следствие 16.2. Для заданного множества вершин x1, x2, x3 ДШ содержит одну ТШ g c координатами (Sср, Тср), если она не совпадает ни с одной из вершин x1, x2, x3 и суммарная длина ребер ДШ равна 1/2P(x1, x2, x3).
Лемма 16.4. Дано ДШ на множестве X = {x1, x2, ..., xn}, а ТШ этого дерева образуют множество G = {g1, g2, ..., gk}. Если g1 G и gi I, то g1 содержит элемент g1.k, соединенный не менее чем с двумя вершинами из I, в противном случае g1 пусто. Здесь I — множество точек пересечения линий координатной сетки.
На основе приведенных лемм сформулирована известная теорема.
Теорема 16.11. Дано ДШ на множестве вершин X = {x1, x2, ..., xn} с множеством ТШ G = {g1, g2, ..., gk}. Тогда для этого множества существует такое другое ДШ с множеством ТШ G’, что (g’i G’)(g’i I).
Из рассмотрения теоремы следует метод определения ДШ на основе полного перебора в качестве ТШ всех возможных подмножеств точек I. Очевидно, что такой метод применим только при построении ДШ для небольшого числа ТШ. В этой связи разрабатываются эвристические процедуры построения квазиоптимальных ДШ.
Процедура 1.
1. Все вершины xi X проектируются на ось S(T).
2. Расстояние от наименьшей до наибольшей координаты делится пополам, и из этой точки i I проводится перпендикуляр (столб Штейнера).
3. Из каждой вершины xi X опускается перпендикуляр до пересечения со столбом Штейнера.
4. Построено ДШ. Конец работы алгоритма.
На основе данной процедуры можно предложить следующий алгоритм построения дерева Штейнера.
Итак, во-первых, мы отображаем заданный граф G в координатную решётку, а затем находим координаты всех вершин полученного графа Gr и вычисляем по какой из осей координат разность максимального и минимального значений координат будет максимальной.
После этого проводим перпендикуляр к той оси, относительно которой разность координат меньше. При этом перпендикуляр проводим либо на равном удалении от крайних точек, либо, если количество вершин с одной стороны перпендикуляра значительно превышает число вершин с другой, немного сдвигаем перпендикуляр по оси координат в сторону большего числа вершин.
Полученный таким образом перпендикуляр представляет собой ось или ствол будущего дерева, который затем соединяют отрезками с остальными вершинами графа.
Данный алгоритм очень прост, ВСА равна O(n), но суммарная длина проводников дерева Штейнера далеко не оптимальна.
Процедура 2 (Алгоритм Ханана).
1. Все множество вершин xi X разбивается на классы S0, S1, ..., Si в порядке возрастания координаты Si так, чтобы у всех вершин одного класса была одинаковая координата Si.
2. Анализируется множество вершин класса S0, и соединяются перпендикуляром все вершины этого множества с точкой Smin оси S.
3. Образуется множество I’, состоящее из всех точек I, которые были до этого соединены с произвольной вершиной xi, включая и вершины xi строящегося ДШ.
4. Выбирается следующее множество Si+1, имеющее наименьшую координату S. Определяются точка im I’ и вершина xj Si+1, для которых
d(im, xj) d(iq, xj’), iq I’, xj’ Si+1.
Другими словами, xi находится на кратчайшем расстоянии от рассматриваемого фрагмента ДШ в классе Si+1. Точка im с координатами (sm, tm) соединяется с вершиной xj с координатами (si, ti) двухзвенной линией. Причем звенья параллельны координатным осям S и T.
5. Для каждой вершины xk Si+1 производятся операции, аналогичные 4. При этом вершина xk соединяется с ближайшей в I’.
6. Пункты 4 и 5 повторяются для всех по порядку множеств Sj до построения ДШ.
Отметим, что существует большое число модификаций описанных процедур. Можно проводить упорядочивание координат не по увеличению S(T), а по уменьшению S(T). Временная сложность алгоритма процедуры 2 составляет O(n2). На рис. 2.39, б показана реализация процедуры 2 с упорядочиванием вершин в 1 в порядке убывания координат S. Суммарная длина ДШ составляет 22 условные единицы, при этом число ТШ равно 2.
Для построения ДШ можно использовать методы поиска или ветвей и границ в зависимости от требований на ВСА.
Заметим, что на основе модели дерева можно описывать любое алгебраическое выражение, например, дерево (рис. 16.40) может моделировать следующие записи:
(2+у)*7, *+2у7, *(2+у)7, 2у+7*, (2+у)7* и т.п.
Запись, где символы операций предшествуют операндам, называется Польским выражением или Польской записью. Это – *+2у7. Использование таких моделей позволяет разрабатывать эффективные программы и алгоритмы преобразования алгебраических выражений.
Рис. 16.40. Пример записи алгоритма на основе модели дерева
