Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7_Задачи на графах.doc
Скачиваний:
13
Добавлен:
07.02.2016
Размер:
113.66 Кб
Скачать

4. Изоморфность графов

Изоморфизм

Графы g1(V1,X1) и g2(V2,X2) называются изоморфными, если существует биективное отображение  : V1V2 , сохраняющее смежность, т.е.

{ a,b}  X1  { (a), (b) }  X2 .

Если два некоторых графа являются изоморфными, они имеют одинаковую структуру. Можно говорить о том, что изоморфные графы отличаются лишь нумерацией (или обозначениями) вершин.

Имеют место следующие утверждения.

1 Необходимым условием изоморфности графов A и B является одинаковое число вершин и одинаковое число ребер.

2 Графы изоморфны в том и только в том случае, если изоморфны их дополнительные графы.

3 Отношение изоморфности на множестве графов является отношением эквивалентности.

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

Существует два пути строгого установления изоморфности графов: использование полных инвариантов и прямая проверка изоморфности графов.

Рассмотрим 3 алгоритма проверки изоморфности:

- полный перебор;

- ПНВ-алгоритм;

- модифицированный ПНВ-алгоритм.

Полный перебор

Осуществляется перебор и проверка всех возможных функций подстановки (v). Эта функция ставит в соответствие каждой вершине v графа A некоторую вершину графа B (значение функции (v)). Т.к. функция (v) определена на дискретном множестве с числом элементов n и функция является биективной, то всего разных функций подстановки (v) существует n!. Для проверки одной подстановки требуется сравнить поэлементно две матрицы смежности размером nn. Операция сравнения одной пары элементов двух матриц смежности включает в себя два этапа: вычисление значения функции (v) и собственно сравнение двух значений. Из приведенных фактов следует, что время установления изоморфности будет равно:

t  Const n! n2.

Символ "" появляется от того, что при обнаружении первого изоморфизма выполнение алгоритма завершается. Однако, если исходные графы не изоморфны, будут проверены все возможное варианты функций (v). Т.о. функция сложности для рассматриваемого алгоритма равна:

Ft(n) = ( n2n!) .

Программная реализация

Для перечисления функций подстановок (v) можно использовать функцию permut:

int permut(int n, int* p)

При каждом вызове эта функция формирует очередную перестановку для последовательности целых чисел, сохраняемой в массиве p. Возвращаемое значение: номер полученной перестановки.

ПНВ-алгоритм

Рассмотрим ПНВ-алгоритм, он относится к разряду т.н. back-tracking (поиск с возвратом). Суть алгоритма состоит в последовательном наложении (установлении соответствия) вершин графа A на вершины графа B таким образом, чтобы формируемые подмножества вершин в одном и другом графах имели одинаковые отношения смежности. Таким образом, в A и B строится общий, с точностью до изоморфизма, подграф, число вершин в котором на каждом шаге увеличивается. При этом, если на очередном шаге никакая из оставшихся вершин графа B не подходит для включения ее в выделенное подмножество, делается шаг назад и выполняется попытка заменить последнюю вершину из включенных в указанное подмножество на другую. Алгоритм завершается если формируемое подмножество покрывает все вершины графа (с выдачей результата "ДА") либо при исчерпании всех возможных вариантов наложения (с выдачей результата "НЕТ").

Ниже приведено описание алгоритма в виде С++-функции iso(A,B).