Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по МОТС / ДИСКРЕТНАЯ МАТЕМАТИКА Графы.doc
Скачиваний:
377
Добавлен:
15.02.2014
Размер:
3.38 Mб
Скачать

11.2.3. Улучшенный перебор

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

ЗАМЕЧАНИЕ

Рекурсивная форма метода поиска с возвратами удобна для понимания, но не является самой эффективной. По сути, рекурсия здесь используется для сохранения контекста — то есть информации, характеризующей текущий рассматриваемый вариант. Если исполь­зовать другие методы сохранения контекста, то поиск с возвратами может быть реализован без явной рекурсии, а значит, более эффективно.

Рассмотрим методы улучшения перебора на примере задачи отыскания всех мак­симальных независимых множеств вершин.

Идея: начинаем с пустого множества и пополняем его вершинами с сохранением независимости (пока возможно).

Пусть Sk — уже полученное множество из k вершин, Qk — множество вершин, которое можно добавить к Sk, то есть Sk П T(Qk) = 0. Среди вершин Qk будем различать те, которые уже использовались для расширения Sk (обозначим Qk), и те, которые еще не использовались (Qk). Тогда общая схема нерекурсивной реализации поиска с возвратами будет состоять из следующих шагов.

Шаг вперед от k к k + 1 состоит в выборе вершины х 6 Qk:

Sk+i = Sk U {х},

Шаг назад от fc + 1 к fc:

Sk — Sk+i - {х},

Ql = Qt- to,

Qk = Qk u (4-

Если Sk — максимальное, то Q% = 0. Если Q^ Ф 0, то Sk было расширено раньше и не является максимальным. Таким образом, проверка максимальности задается следующим условием: Q+ = Q~ = 0.

Перебор можно улучшить, если заметить следующее.

Пусть х € Q^" и r(x)r\Q~£ = 0. Эту вершину х никогда не удалить из Q^, так как из Q~ удаляются только вершины, смежные с Q~£. Таким образом, существова­ние х, такого что х € Qk и Г(х) n Q% = 0, является достаточным условием для возвращения. Кроме того, k ^ р — I.

11.2.4. Алгоритм построения максимальных независимых множеств вершин

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

Алгоритм 11.2. Построение максимальных независимых множеств

Вход: граф G(V, Е), заданный списками смежности Г[г>]

Выход: последовательность максимальных независимых множеств

k : - О { количество элементов в текущем независимом множестве }

S[k]: = 0 { S[k] — независимое множество из k вершин }

Q~ [k}: = 0 {Q~ [k] — множество вершин, использованных для расширения S[k] }

Q+ [fc]: = V { Q+ [k] — множество вершин, которые можно использовать для расширения

S(k}}

Ml :{ шаг вперед }

select v e Q+ [k] { расширяющая вершина }

S[k + 1]: = S[k] U {v} { расширенное множество }

Q~[k + l}: = Q~ [k] \T[v] { вершина v использована для расширения }

<2+[fc+l]: ~Q+[k]\(T[v]U{v}) { все вершины, смежные с v, не могут быть использованы

для расширения }

М2 : { проверка } for и Е Q~ [k] do

if T[u]r\Q+[k] =0 then goto M3 { можно возвращаться }

end if end for if g+[fc] = 0 then

if Q~[k] = 0 then yield S[k] { множество S[k] максимально }

end if

goto M3 { можно возвращаться } else

goto Ml { можно идти вперед } end if

M3 : { шаг назад } v : = last(S[fc]) { последний добавленный элемент }

S[fc]: = S[k + 1] - {v}

Q~ [k]: = Q~ [k] U {v} { вершина v уже добавлялась }

Q+[k]: = Q+[k]\{v}

if fc = 0&<2+[fc] = 0 then

stop { перебор завершен } ebe

goto M2 { переход на проверку } end if

Пример

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