- •Оглавление
- •Глава 1. Алгебраические системы 17
- •Глава 2. Элементы комбинаторики 88
- •Глава 3. Основы теории графов 101
- •Глава 4. Основы математической логики 169
- •4.1.1.4. Эквивалентные преобразования формул 179
- •4.1.4. Выполнить подстановку: 247
- •Глава 5. Основы теории алгоритмов 252
- •Глава 6. Конечные автоматы 289
- •Введение
- •Глава 1. Алгебраические системы
- •1.1 Множества
- •1.1.1. Четкие множества
- •1.1.2. Нечеткие множества
- •1.2. Соответствия, отображения и функции
- •1.2.1. Четкие отображения и функции
- •1.2.2. Нечеткие отображения
- •1.3. Отношение
- •1.3.1. Четкие отношения
- •1.3.2. Нечеткое отношение
- •1.4. Элементы общей алгебры
- •1.5. Булева алгебра
- •1.5.1. Булевы операции
- •1.5.2. Законы булевой алгебры
- •1.5.3. Формула булевой функции
- •1.5.4. Описание булевой функции
- •1.5.5. Суперпозиция булевых функций
- •1.5.6. Свойства булевых функций
- •1.5.6.1. Самодвойственные булевы функции
- •1.5.6.2. Монотонные булевы функции
- •1.5.6.3. Линейные булевы функции
- •1.5.6.4. Функции, сохраняющие “0”
- •1.5.6.5. Функции, сохраняющие “1”
- •1.5.6.6. Функционально полные системы
- •1.5.7. Разложение булевых функции
- •1.5.7.1. Днф булевой функции
- •1.5.7.2. Кнф булевой функции
- •Алгоритм преобразования формулы к скнф:
- •1.5.8. Минимизация булевых функций.
- •1.5.8.1.Минимизация днф булевой функции
- •1.5.8.2. Минимизация кнф булевой функции
- •1.6. Алгебра четких множеств
- •1.6.1. Операции над множествами
- •1.6.2. Законы алгебры множеств
- •1.6.3. Эквивалентные преобразования формул
- •1.6.4. Композиция отображений и отношений
- •1.6.5. Поиск неизвестного множества
- •1.7. Алгебра нечетких множеств
- •1.7.1. Операции над нечеткими множествами
- •1.7.2. Композиция нечетких отображений
- •1.7.3. Композиция нечетких отношений
- •1.7.4. Свойства нечетких отношений
- •Вопросы и задачи
- •Глава 2. Элементы комбинаторики
- •2.1. Размещение из n элементов по k
- •2.2. Перестановка элементов
- •2.3 Сочетание из n элементов по k
- •2.4. Разбиение множества
- •2. 5 Правила комбинаторики
- •Вопросы и задачи
- •Глава 3. Основы теории графов
- •3.1. Граф и его характеристики
- •3.2. Описание графа
- •3. 3. Числа графа
- •3.4. Операции над графами
- •3.4.1. Унарные операции
- •3.4.1.1 Поиск дополнительного графа
- •3.4.1.2. Введение и удаление вершин графа
- •3.4.1.3. Стягивание вершин графа
- •3.4.1.4. Введение и удаление ребер графа
- •3.4.1.5. Поиск плотности и неплотности графа
- •3.4.1.6. Поиск числа компонент связности графа
- •3.4.1.7. Поиск устойчивости графа
- •3.4.1.8. Поиск цикломатического числа графа
- •3.4.1.9. Поиск хроматического числа графа
- •3.4.2. Бинарные операции
- •3.4.2.1. Объединение графов
- •3.4.2.2. Пересечение графов
- •3.4.2.3. Композиция графов
- •3.4.2.4. Соединение графов
- •3.4.2.5. Прямое произведение графов
- •3.4.2.6. Изоморфизм графов
- •3.5. Некоторые алгоритмы на графах
- •3.5.1. Построение покрывающего остова
- •3.5.2. Построение остова минимального веса
- •3.5.3. Поиск кратчайших путей в сети.
- •3.5.4. Поиск максимального потока в сети
- •3.5.5. Метод критического пути в управлении
- •3.6. Нечеткие графы
- •Вопросы и задачи
- •Глава 4. Основы математической логики
- •4.1. Логика высказываний
- •4.1.1. Алгебра высказываний
- •4.1.1.1. Логические операции
- •4.1.1.2. Правила записи сложных формул.
- •4.1.1.3. Законы алгебры высказываний
- •4.1.1.4. Эквивалентные преобразования формул
- •4.1.1.5. Нормальные формы формул
- •4.1.2. Исчисление высказываний
- •4.1.2.1. Интерпретация формул
- •4.1.2.2. Аксиомы и правила введения и удаления логических связок
- •4.1.2.3. Метод дедуктивного вывода
- •4.1.2.4. Принцип резолюции
- •4. 2. Логика предикатов
- •4.2.1. Алгебра предикатов
- •4.2.1.1. Законы алгебры предикатов
- •4.2.1.2. Предваренная нормальная форма формулы
- •4.2.1.3 Сколемовская стандартная форма формулы
- •4. 2. 2. Исчисление предикатов
- •4.2.2.1. Правила подстановки
- •4.2.2.2. Правила введения и удаления кванторов
- •4.2.2.3. Правила заключения
- •4.2.2.4. Метод дедуктивного вывода
- •4.2.2.5. Принцип резолюции
- •4.2.2.6. Логическое программирование
- •4.3. Логика реляционная
- •4.3.1 Реляционная алгебра
- •4.3.1.1. Унарные операции
- •4.3.1.2. Бинарные операции
- •4.3.1.3. Правила реляционной алгебры
- •4.3.2. Реляционное исчисление
- •4.3.3. Языки реляционной логики
- •4.4. Нечеткая логика
- •4.4.1. Нечеткое исчисление
- •4.4.2. Экспертные системы
- •Вопросы и задачи
- •Глава 5. Основы теории алгоритмов
- •5.1. Рекурсивные функции
- •5.1.1. Базовые функции
- •5.1.2. Элементарные операции
- •5.2. Машина Тьюринга
- •5.2.1. Описание машины Тьюринга
- •5.2.2. Примеры машин Тьюринга
- •5.2.3. Композиция машин Тьюринга
- •5.3. Нормальные алгоритмы Маркова
- •5.4 Сложность вычислений
- •Вопросы и задачи
- •Глава 6. Конечные автоматы
- •6.1. Абстрактный автомат
- •6.1.1. Типы конечных автоматов
- •6.1.2. Описание автоматов
- •6.1.3. Автоматное моделирование алгоритмов
- •6.1.3.1. Автомат Мили - модель управляющего автомата
- •6.1.3.2. Автомат Мура - модель управляющего автомата
- •6.1.3.3. Микропрограммный автомат
- •6.1.4. Эквивалентность автоматов
- •6.1.5. Эквивалентность внутренних состояний автомата
- •6.1.5.1. Детерминированный автомат
- •6.1.5.2. Недетерминированный автомат
- •6.2. Структурный автомат
- •6.2.1. Произведение автоматов
- •6.2.1.1. Последовательное соединение автоматов
- •6.2.1.2. Параллельное соединение автоматов
- •Обратная связь автоматов
- •6.2.3. Сумма автоматов
- •6.2.4. Структурный автомат и кодирование
- •6.3. Логическое проектирование автоматов
- •6.3.1. Кодирование алфавитов автомата
- •6.3.2. Автоматы без “памяти”.
- •6.3.2.1. Формирование оператора
- •6.3.2.2. Формирование системы операторов
- •Логическая схема комбинационного автомата
- •6.3.3. Автоматы с “памятью”
- •6.3.3.1. Формирование оператора
- •6.3.3.2. Формирование оператора
- •.3.3.3. Логическая схема автомата с “памятью”
- •Вопросы и задачи
- •Литература
- •Предметный указатель
3.5.4. Поиск максимального потока в сети
При обмене информацией между абонентами вычислительной сети, при параллельных вычислениях на многомашинном комплексе, когда решение задачи распределено между несколькими процессорами, при использовании в вычислительной сети общей памяти, когда каждый процессор получает ограниченный доступ к общим модулям памяти, возникает задача передачи максимального объема информации в заданный отрезок времени.
При работе транспортной системы, когда осуществляется обмен транспортными единицами между узлами сети возникает задача передачи максимального числа транспортных единиц в заданный отрезок времени.
При передаче энергии в электрических сетях, жидкости в трубопроводных системах возникает задача распределения и передачи максимального объема энергии или вещества в заданный отрезок времени.
Особенностью сети является наличие вершины-истока и вершины-стока, ориентация всех отрезков линий в графе и отсутствие петель и кратных дуг.
Объем информации, энергии или вещества, передаваемый в сети от узла xi к узлу xj, называют потоком и обозначают ij.
Наибольший поток, который может пропустить дуга (xi, xj), называют пропускной способностью дуги и обозначают сij.
Очевидно, что 0ij сij.
В вершине-истоке х0 величина потока есть сумма потоков по всем дугам, исходящим из вершины х0, т.е. =i0i+.
В вершине-стоке хk величина потока есть сумма потоков по всем дугам, заходящим в вершину хk, т.е. =iik-.
Для любой промежуточной вершины хi сумма исходящих потоков равна сумме заходящих потоков, т.е. jij+=kik-.
На рис. 3.29 показана условная сеть, содержащая вершину-исток х0, вершину-сток хk и две промежуточные вершины хi и хj. На каждой дуге в круглых скобках приведены обозначения потока и пропускной способности соответствующей дуги. При этом поток, подводимый к сети равен =(0i+0j), поток отводимый от сети равен =(ik+jk), поток из вершины хi в вершину хj равен ij. Для вершины хi имеем 0i=(ij+ik), для вершину хj - jk=(0j+ij).
Если множество вершин графа разбить на два непересекающихся подмножества, одно из которых содержит вершину-исток, а другое - вершину-сток, то множество дуг, соединяющих эти два множества, формируют разрез Аi, пропускная способность которого равна сумме пропускных способностей дуг. Таких разрезов может быть несколько.
В таблице приведены четыре разреза для сети на рис. 3.29
Разрез |
пропускная способность дуги Сij |
пропускная способность |
||||
|
С0 i |
С0 j |
Сi j |
Сi k |
Сjk |
разреза С(Ai) |
А1 |
1 |
1 |
0 |
0 |
0 |
С0i+ С0j |
А2 |
0 |
1 |
1 |
1 |
0 |
С0j+Сij+Сik |
А3 |
0 |
0 |
0 |
1 |
1 |
Сik+Сjk |
А4 |
1 |
0 |
1 |
0 |
1 |
С0i+Сij+Сjk |
Например, для разреза А1 имеем Х’={x0} и X\Х’={хi, хj, хk}, для А2 - Х’={х0, хi} и X\Х’={хj, хk}, для А3 - Х’={х0, хi, xj} и X\Х’={хk}, для А4 - Х’={х0, хj} и X\Х’={xi, хk}.
Очевидно, что величина максимального потока ограничена минимальной пропускной способностью разреза, т.е.
max=min{С(Ai)}
Итак, максимальный поток в сети с заданными пропускными способностями дуг можно находить, вычисляя пропускные способности разрезов и выбирая среди них - минимальную. Однако при таком решении остается неизвестным распределение потока по дугам.
Для поиска распределения потока по дугам разработано несколько алгоритмов. Особое место среди них занимает алгоритм Форда-Фалкерсона, суть которого состоит в разметке вершин графа.
Метка вершины графа указывает на возможность изменения потока через данную вершину и указывает источник этого изменения. На рис. 3.30 дан фрагмент сети, объясняющий суть алгоритма.
Если по дуге (хs, хi) возможно увеличение потока ( si< csi), то вершину хi следует пометить +s , что указывает на источник увеличения потока.
Если по дуге (хi, хj) возможно увеличение потока ij< cij, то вершину хj пометить +i . Это означает, что приращение потока si пойдет по направлению дуги (хi, хj) от вершины хs.
Если насыщена дуга (хs, хi), т.е. si=csi, то метку +s нельзя ставить у вершины хi. Следовательно, если вершина xi не помечена, то у вершины xj нельзя ставить метку +i.
Если по дуге (хt, хj) возможно увеличение потока, т.е. tj< ctj, то вершину хj следует пометить +t , что указывает на источник увеличения потока.
Если вершина хj не имеет пометки +i , то для увеличения потока в фрагменте сети, следует уменьшить поток в дуге (хi, хj) и направить его далее по другим дугам фрагмента на сток. Для указания этого у вершины xi ставят метку – j. Это означает что при общем приращении потока на участке (хi, хj) он должен быть уменьшен на величину tj.
Если насыщена дуга (хt, хj), т.е. tj=ctj, то метку +t нельзя ставить у вершины хj. Следовательно, если вершина xj не помечена, то у вершины xi нельзя ставить метку -j.
Если насыщены обе дуги (хs, хi) и (хt, хj), что означает невозможность приращения потока si и tj, то нельзя ставить метки у вершин xi и xj и продолжения разметки следующих вершин сети до вершины-стока.
Так достигают максимального значения потока от вершин-истоков хs и хt по дугам к вершинам - стокам хi и хj.
Алгоритм Форда-Фалкерсона:
шаг 1: присвоить всем вершинам графа индексы 0,1,2,...k; где 0-индекс вершины-истока графа, k -индекс вершины-стока графа;
шаг 2: присвоить начальной вершине метку “0”;
шаг 3: все непомеченные вершины хi, в которые идут ненасыщенные дуги из помеченной вершины хs, пометить индексом “+s”, что свидетельствует о возможности увеличения потока из вершины хs по дуге (хs, хi);
шаг 4: все непомеченные вершины хi, из которых идут дуги (насыщенные или ненасыщенные) в помеченную вершину хj, пометить индексом “-j”, что свидетельствует о возможности уменьшения потока в вершину хj по дуге (хi, хj);
шаг 5: если в результате этих операций окажется помеченной вершина-сток xk, то между начальной и конечной вершинами сети найдется маршрут, все вершины которого различны и с точностью до знака помечены индексами предыдущих вершин, формирующих переход, по которому можно увеличить поток, и перейти к шагу 6, иначе конец.
шаг 6: увеличить поток в маршруте, сформированном на шаге 5, на единицу и перейти к шагу 3.
Признаком окончания работы алгоритма является невозможность пометки вершины-стока.
Пример: На рис. 3.31 дан граф. Найти величину максимального потока и его распределение в сети.
На каждой дуге (хi, хj) указаны величина потока и пропускная способность - (ij, cij).
Все расчеты сведены в две таблицы таблица а)
-
хi
шаг итерации
1
2
3
4
5
6
7
х0
0
0
0
0
0
0
0
х1
+0
+0
+0
+0, -3
-3
-
-
х2
+0;+3
+0;+3
+0
+0
+0
+0
-
х3
+0;+1
+0;+1
+0;+1
+0
+0
-
-
хk
+1;+2;+3
+1;+2
+1;+2
+1;+2
+1,+2
+2
-
таблица b)
-
(хi, хj)
Сij
шаг итерации
1
2
3
4
5
6
7
(х0, х1)
2
0
0
1
2
2
2
2
(х0, х2)
1
0
0
0
0
0
1
1
(х0, х3)
3
1
2
2
2
3
3
3
(х1, х3)
4
0
0
1
1
0
0
0
(х1, хk)
3
0
0
0
1
2
2
2
(х2, хk)
2
0
0
1
1
1
2
2
(х3, х2)
1
0
0
1
1
1
1
1
(х3, хk)
2
1
2
2
2
2
2
2
. В таблице а) на каждом шаге итерации для каждой вершины графа указаны возможные метки, а в таблице b) даны приращения потока по дугам (хi, хj). Полужирным шрифтом выделены насыщенные дуги графа
В результате выполнения первого шага итерации возможны переходы: 0k={(хk, х1, х0); (хk, х2, х0); (хk, х2, х3, х0); (хk, х2, х3, х1, х0);
(хk, х3, х0); (хk, х3, х1, х0)}. Пусть выбран 0k=(хk, х3, х0). Приращение потока на =1 проходит по маршруту =((х0, х3), (х3, хk)).
На втором шаге возможны те же переходы. Пусть выбран переход 0k=(хk, х3, х0). Приращение потока на =1 проходит по маршруту ={(х0, х3), (х3, хk)}. При этом дуга (х3, хk) оказывается насыщенной, т. е. 3k=c3k=2.
На третьем шага возможны переходы: 0k={(хk, х1, х0); (хk, х2, х0); (хk, х2, х3, х0); (хk, х2, х3, х1, х0)}. Пусть выбран 0k=(хk, х2, х3, х1, х0). Приращение потока на =1 проходит по маршруту =((x0, x1), (x1, x3), (x3, x2), (x2, xk)). При этом оказывается насыщенной дуга (х3, х2), т. е. 32=c32=1.
На четвертом шаге возможны переходы: 0k={(хk, х1, х0); (хk, х2, х0)}. Пусть выбран ok=(хk, х1, х0). Приращение потока на =1 проходит по маршруту =((x0, x1), (x1, xk)),. При этом оказывается насыщенной дуга (х0, х1), т. е. 01=c01=2.
На пятом шаге возможны переходы: 0k={(хk, х1, -x3, х0); (хk, х2, х0)}. Пусть выбран ok=(хk, х1, -x3, х0). Приращение потока на =1 проходит по маршруту =((x0, x3), (x3, x1), (x1, xk))),. При этом оказывается насыщенной дуга (х0, х3), т. е. 03=c03=3.
На шестом шаге возможен только один переход 0k=(хk, х2, х0), так как дуги (x0, x1) и (x0, x3) насыщены. Приращение потока на =1 проходит по маршруту =((x0, x2), (x2, xk)),. При этом оказывается насыщенной дуга (х0, х2), т. е. 02=c02=1.
На седьмом шаге невозможны ни один переход от xo к xk, так как дуги (x0, x1), (x0, x3) и (х0, х2) насыщены и невозможно поставить метки у вершин x1, x2, и x3.