Теория игр и исследование операций. Модели, алгоритмы, сложность: Конспект лекций, страница 23

Путь – последовательность ребер вида , т.е. конец предыдущего ребра, является началом следующего ребра. Цикл – это путь, у которого начало первого ребра совпадает с концом последнего, т.е. ik = i1.

Возведем в квадрат матрицу смежности. Что будет её элементами?

A = {aij Î{0,1}},A2 = {bij}, причем . = числу таких k, при которых aik = 1 и akj = 1,т.е. есть ребра (i, k) и (k, j), есть путь длины 2 из i в j.

Т.о. bij есть число различных путей длины 2 из i-й вершины в j-ую. Ak- число путей длины k из i в j, причем пути могут не быть простыми (= без циклов).

Два графа называются изоморфными, если существует такая нумерация вершин второго графа, при которой матрицы смежности обоих графов совпадут.

Трудоемкость проверки изоморфности перебором нумераций равна O( n 2 × n!).
Степень вершины i – это число единиц в i–ой строке матрицы смежности.

Теорема. Графы изоморфны Þ наборы степеней вершин у них совпадают.

Граф связный, если между любыми двумя вершинами есть путь.

Дерево – связный граф без циклов = связный граф, содержащий n-1 ребро.

Сколько различных деревьев существует на n вершинах?


№17. Алгоритм кодирования деревьев.

Степени вершин S

3

1

1

4

1

1

1

3

1

Номер вершины  I (внизу - шага)

1

2

3

4

5

6

7

8

9

Отцовская вершина О

1

4

1

4

6

4

8

9

Удаляемая вершина U

2

3

5

1

8

7

4

8

9

Пусть есть дерево

На k-м шаге мы выбираем в векторе степеней S самую левую вершину Uk с единичной степенью, удаляем ее, а у нее и ее отца Ok уменьшаем степень на 1.

На основе вектора S и картинки мы построим 2 вектора U и О (вместо картинки можно использовать матрицу смежности). Размерности векторов U и O = n-1. По построению пара (Ui, Oi) является ребром дерева. Все Uk – различны (удалить вершину можно только 1 раз), но в векторе U не хватает вершины 9, ее мы перекинем из O, и получим вектор O*: dim(O*)=n-2; и вектор U*: dim(U*)=n. Зная O*, легко восстановить дерево. В самом деле, пусть N(i,A) - кратность числа i в векторе A. Очевидно, N(i,U*)=1 для всех i. Восстанавливаем S:
Si = N(i,O) + N(i,U) = N(i,O *) + N(i,U *) = N(i,O *) + 1. Зная S, вычислим U1 Þ 1-е удаленное ребро графа = (U1, O1). Уменьшив на 1 степени вершин U1 и O1, найдем U2 и 2-е ребро графа (U2, O2) и т.д. Получили алгоритм декодирования. Рисовать восстанавливаемые ребра удобно в порядке, обратном удалению!

Соответствие между O* и деревом – взаимнооднозначное (докажите),è число деревьев с помеченными вершинами = числу различных векторов O* = nn-2.

Напомним, что число неориентированных графов на n вершинах ‑2n (n-1)/2.

Пример: Если n=3 и матрицу смежности неориентированного графа превратить в вектор из 0 и 1, то деревьям соответствуют 3 вектора из 8-ми: 110, 101 и 011.

Если n=4, то 42=16 деревьев из 26=64 неориентированных графов без петель.

Если n=5, то 53=125 деревьев из 210=1024 графов

Сколько различных неизоморфных деревьев можно построить на n вершинах?

n=3 (1 дерево):                                              n=5 (3 дерева):

n=4 (2 дерева):

Пусть Si – степень вершин, R – количество ребер дерева Þ S Si = 2*R = 2*(n-1). Выпишем упорядоченные по убыванию вектора степеней вершин при n=4:

2 2 1 1  и  2 1 1 1. Они различны, Þ графы неизоморфны. S Si =2*3 = 6.

Сколько различных упорядоченных векторов степеней вершин?

Есть n мест. На них нужно разместить 2(n-1) единиц (не менее одной на место).