Лекция 5: Параллельные методы расчета транспортной сети
Пример
Продолжим исследование приведенной выше сети.
-
Заносим в стек первую строку матрицы S. Находим первый нуль после обязательного нуля в первой позиции. Этот нуль указывает, что каналы 1 и 2 взаимно независимы (параллельны). Складываем логически строки, соответствующие каналам 1 и 2. Получаем новую строку s1 в вершине стека
Она содержит нули правее позиции 2. Это говорит о том, что 1 и 2 не исчерпывают ПМВНК. -
Находим первый нуль правее позиции 2 — нуль в позиции 3. Складываем логически s2 = s1
"3". Получаем новую строку в вершине стека и весь стек в виде
Строка в вершине стека содержит нули только в тех позициях, которые соответствуют образующим ее каналам 1, 2, 3. Это означает, что мы нашли ПМВНК {1, 2, 3}, т.е. некоторый разрез сети. Минимальный поток, проходящий через него, составляет d1 + d2 + d3. -
Исключаем из стека строку s2 и в строке s1 испытываем следующий нуль правее позиции 2. Это нуль в позиции 4. Формируем новую вершину стека s3 = s1
"4".
Строка s3 содержит нули не только в позициях 1, 2, 4. Первый такой нуль правее позиции 4 — в позиции 7.Формируем новую вершину стека s4 = s3
"7". Стек принимает вид
Строка s4 содержит нули только в позициях, соответствующих каналам, "участвующим" в ее формировании. Значит, найдено еще одно ПМВНК {1, 2, 4, 7}. Оно определяет разрез сети с пропускной способностью d1 + d2 + d4 + d7. -
Исключаем s4 из стека. Следующий испытываемый нуль в строке s3 занимает позицию 8. Формируем новую вершину стека s5 = s3
"8".
Строка s5 содержит нули только в позициях 1, 2, 4, 8. Следовательно, найдено ПМВНК {1, 2, 4, 8} с пропускной способностью d1 + d2 + d4 + d8. -
Исключаем s5 из стека. Находим, что в s3 все нули исследованы. Исключаем s3 из стека. В s1 следующий нуль, подлежащий испытанию, занимает позицию 7. Формируем новую вершину стека — строку s6 = s1
"7".
Строка s6 не содержит нулей правее позиции 7. Исключаем s6 из стека. -
Следующий испытываемый нуль в s1 занимает позицию 8. Находим s7 = s1
"8"
Строка также не содержит нулей правее позиции 8. Исключаем ее из стека.Все нули строки s1 испытаны. Исключаем s1 из стека. В стеке остается лишь строка "1".
-
Следующий испытываемый нуль в строке "1" занимает позицию 3. Формируем новую вершину стека — строку s8 = "1"
"3"
Строка s8 не содержит нулей правее позиции 3. Исключаем ее из стека. -
Следующий нуль в первой строке занимает позицию 4. Формируем новую вершину стека — строку s9 = "1"
"4"
Строка содержит нули не только в позициях 1 и 4. Первый же "дополнительный" нуль занимает позицию 2. Это говорит о повторном формировании уже сформированных ПМВНК. Исключаем строку из стека. -
Следующий испытываемый нуль первой строки занимает позицию 6. Формируем s10 = "1"
"6"
Строка не содержит "дополнительных" нулей до позиции 6. Первый испытываемый нуль занимает позицию 7. Формируем новую вершину стека s11 = s10"7", а стек принимает вид
Строка s11 содержит нули только в позициях каналов, участвующих в ее формировании. Найдено очередное ПМВНК {1, 6, 7} с потоком d1 + d6 +d7. -
Исключаем s11 из стека. Следующий испытываемый нуль в s10 занимает позицию 8. Формируем s12 = s10
"8".
Строка определяет очередное ПМВНК {1, 6, 8} с потоком d1 + d6 +d8. -
Исключаем s12 из стека. Строка s10 испытана полностью. Исключаем ее из стека. Следующий испытываемый нуль в строке "1" занимает позицию 7. Формируем строку s13 = "1"
"7"
Она не содержит "дополнительные" нули правее позиции 7. Исключаем строку из стека. -
Испытание нуля в позиции 8 первой строки приводит к тому же результату.
-
Все комбинации каналов с участием канала 1 исчерпаны. Выбираем следующий канал. Т.е. загружаем в стек вторую строку матрицы S. Первый нуль в позиции, не меньшей 2, занимает позицию 3. Формируем новую вершину стека s14 = "2"
"3"
-
Первый нуль правее позиции 3 в строке s14 занимает позицию 5. Формируем s15 = s14
"5"
Строка содержит нули только в позициях 2, 3, 5. Это определяет ПМВНК {2, 3, 5} с потоком d2 + d3 + d5. -
Следующий нуль в строке s14 занимает позицию 9. Формируем s16 = s14
"9"
Строка содержит нули только в позициях 2, 3, 9. Это определяет ПМВНК {2, 3, 9} с потоком d2 + d3 + d9. -
Формируем s17 = "2"
"4"
Первый "дополнительный" нуль занимает позицию 5. Формируем s18 = s17"5"
Строка s18 содержит нули не только в позициях 2, 4, 5. Первый "дополнительный" нуль занимает позицию 7. Формируем s19 = s18"7" = "2"
"4"
"5"
"7"
Строка содержит нули только в позициях 2, 4, 5, 7, что определяет ПМВНК {2, 4, 5, 7} с потоком d2 + d4 + d5 + d7. -
Следующий (последний) "дополнительный" нуль строки s18 занимает позицию 8. Формируем s20 = s18
"8"
и находим ПМВНК {2, 4, 5, 8} с потоком d2 + d4 + d5 + d8. -
Следующий нуль в строке s17 занимает позицию 7. Формируем s21 = s17
"7"
Единственный нуль правее позиции 7 занимает позицию 9. Формируем s22 = s21"9"
и получаем следующее ПМВНК {2, 4, 7, 9} с потоком d2 + d4 + d7 + d9. -
Следующий нуль в строке s17 занимает позицию 8. Формируем s23 = s17
"8"
Единственный "дополнительный" нуль, правее позиции 8, занимает позицию 9. Формируем s24 = s23"9"
Т.к. позиции нулей совпадают с позициями всех каналов, участвующих в комбинации, получаем ПМВНК {2, 4, 8, 9}, определяющее разрез с потоком d2 + d4 + d8 + d9. -
Последний "дополнительный" нуль в s17 занимает позицию 9. Формируем s25 = s17
"9"
Строка содержит нули не только в позициях 2, 4, 9. Однако все "дополнительные" нули занимают позиции левее позиции 9. Это говорит о повторном нахождении ПМВНК. -
Возвращаемся к анализу второй строки матрицы S. Следующий нуль этой строки занимает позицию 5. Формируем s26 = "2"
"5"
Первый "дополнительный" нуль правее позиции 5 занимает позицию 7. Формируем s27 = s26"7"
Наличие "дополнительных" нулей только левее позиции 7 говорит о повторном нахождении ПМВНК. -
Второй, последний, "дополнительный" нуль в строке s26, правее позиции 5, занимает позицию 8. Его анализ также приводит к повторному нахождению ПМВНК.
-
Следующий нуль второй строки матрицы S занимает позицию 7. Формируем s28 = "2"
"7"
Первый "дополнительный" нуль в этой строке, правее позиции 7, занимает позицию 9. Формируем s29 = s28"9"
Строка не содержит нули правее позиции 9, но содержит нули левее этой позиции. Это значит, что мы на пути повторного формирования уже найденного ПМВНК ( {2, 4, 7, 9} ). -
Следующий нуль второй строки S занимает позицию 8. Формируем s30 = "2"
"8"
Нуль в позиции 9 — правее позиции 8. Однако ситуация аналогична рассмотренной на шаге 23. -
Вторая строка исчерпана. Переходим к анализу третьей строки матрицы S. Правее третьей позиции в этой строке есть нуль в позиции 5. Формируем s31 = "3"
"5"
Строка не содержит "дополнительных" нулей правее позиции 5, хотя содержит нули не только в позициях 3 и 5. Значит, мы не получим новых ПМВНК. -
Следующий (последний) нуль в третьей строке занимает позицию 9. Формируем s32 = "3"
"9"
Исключаем строку из стека, т.к. она имеет нули только левее позиции 9. -
Анализируем четвертую строку и убеждаемся, что новых ПМВНК мы не получим.
-
Анализируем пятую строку, Она содержит нули правее пятой позиции - в позициях 6, 7, 8, 10. Формируем s33 = "5"
"6"
Первый "дополнительный" нуль, правее позиции 6, занимает позицию 7. Формируем s34 = s33"7"
Строка содержит нули только в позициях 5, 6, 7. Найдено ПМВНК {5, 6, 7} с потоком d5 + d6 + d7. -
Следующий нуль — в позиции 8. Формируем s35 = s33
"8"
Строка содержит нули только в позициях 5, 6, 8, что соответствует ПМВНК {5, 6, 8} с потоком d5 + d6 + d8. -
Анализ позиций 7 и 8 пятой строки приводит к повторному нахождению ПМВНК.
-
Последний "дополнительный" нуль пятой строки занимает позицию 10. Формируем s36 = "5"
"10"
Строка содержит нули в позициях 5 и 10. Найдено очередное ПМВНК {5, 10} с потоком d5 + d10. -
Переходим к анализу шестой строки матрицы S. Она содержит нули правее шестой позиции в позициях 7, 8, 9. Формируем s37 = "6"
"7"
Правее седьмой позиции "дополнительный" нуль занимает позицию 9. Формируем s38 = s37"9"
Строка содержит нули в позициях 6, 7, 9. Найдено ПМВНК {6, 7, 9} с потоком d6 + d7 + d9. -
Формируем s39 = "6"
"8"
Правее восьмой позиции "дополнительный" нуль занимает позицию 9. Как и на предыдущем шаге, находим следующее ПМВНК {6, 8, 9} с потоком d6 + d8 + d9. -
34. Можно убедиться в том, что анализ седьмой и восьмой строк не приведет к получению новых ПМВНК.
-
Девятая строка содержит единственный нуль правее позиции 9 - в позиции 10. Формируем s40 = "9"
"10"
Найдено последнее ПМВНК {9, 10} с потоком d9 + d10.