Научная статья на тему 'Об алгоритме перечисления остовов связного графа'

Об алгоритме перечисления остовов связного графа Текст научной статьи по специальности «Математика»

CC BY
676
91
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
СВЯЗНЫЙ ГРАФ / ПЛАНАРНЫЙ ГРАФ / ОСТОВНОЕ ДЕРЕВО / ЧИСЛО ОСТОВНЫХ ДЕРЕВЬЕВ / ТРИАНГУЛЯЦИЯ / ЧИСЛО ТРИАНГУЛЯЦИЙ / ВЫПУКЛАЯ ОБОЛОЧКА / CONNECTED GRAPH / PLANAR GRAPH / SPANNING TREE / NUMBER OF SPANNING TREES / TRIANGULATION / NUMBER OF TRIANGULATIONS

Аннотация научной статьи по математике, автор научной работы — Попов Владимир Валентинович

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

ON ALGORITHM OF NUMBERING THE SPANNING TREES IN A CONNECTED GRAPH

Let ?? = (??,??) be a finite connected graph without multiple edges or loops. We consider the task about the numbering of all the spanning trees of ??. In [2, p. 180, p. 191] described a method of solution of this task, based on the properties of minors of an incidence matrix of ??. In the same place (p. 191-193) gave algorithm of four Japanese mathematicians (Kasahara Y., Tezuka K., Ling Shun Tong, Kitahashi T., [6]), reduced the task to removal of brackets in the product of formal sums of edges of ??. Here we concider the method based on lexicographical order on the set of all sequences of edges of ??. We will remind that a spanning tree ?? of the graph ?? is a tree consisting of edges of ?? and connecting all the vertices of ??. We shall assume that ?? = {1, 2,..., ??}, where ?? is a number of vertices of ??. If ??, ?? ? ??, then (??, ??) will be designated the edge with end-points ?? and ??. Let ?? be a spanning in ??. Then the set of his edges can be written in the form (??1, ??1), (??2, ??2),..., (?????1, ?????1), (??) where ???? < ????+1 or ???? = ????+1 and ???? < ????+1, where ?? = 1, 2,..., ?? ? 2. (??) On a set of sequences of in the form of (??) with the additional condition (B) we will consider a lexicographic order. The smallest (with respect to this order) spanning tree will be the tree ??0 with edges (1, 2), (1, 3), (1, 4),..., (1, ??) provided (1, ??) ? ?? for ?? = 2, 3,..., ??. The greatest spanning tree ??1 will be (1, ??), (2, ??), (3, ??),..., (?? ? 1, ??) under a similar condition. Touching all sequences of a look (A) in ascending order between ??0 and ??1 and checking lack of cycles at the corresponding sets of edges, we will be able to get a list of all spanning trees. We will give results of work of the appropriate computer program. Example 1. For complite graph ???? on ?? vertices for ?? ? 9 the lists of all the spanning trees are obtained. Due to Kely theorem ???? has ?????2 spanning trees. For ?? = 9 thos number is equal 4 782 969. Example 2. Let ?? be a graph on 12 vertices in figure 1 (in the left). Then ?? has 2 415 spanning trees. Let ?? be a finite set of points in the plane ??2. Then ?? = (??,??) is a plane geometrical graph on top of ??, if ?? ? ??2 and egdes of ?? are stright-line segments with the end-points in ?? and two edges of ?? intersects only in points of ?? [3]. If ?? is a tree and ?? = ??, then ?? called a spanning tree on top of ??. Example 3. Let ?? be a set of square tops, and also its center. Then there are 45 spanning trees on top of ??. Example 4. Let ?? consists of square tops, and also middle of its parties. Then there are 3 273 spanning trees on top of ??. Example 7. We will consider a set ?? = ????,?? consisting of ?? ·?? points on the plane: ????,?? = {(??, ??) : ?? = 1, 2,..., ??,. = 1, 2,...,??}, where ??,?? ? ????1 are integers. Thus, ????,?? is a uniform lattice which points lie on ?? horizontal straight lines and for ?? vertical straight lines. The numbers ????(??) of a spanning trees on top of this lattice for small ?? and ?? it is specified in the following table: ?? 2 2 2 2 2 3 3 ?? 2 3 4 5 6 3 4 ????(??) 12 169 2 665 44 329 759 114 24 965 4 595 581 At transfer the spanning trees it is possible to carry out a filtration. For example, it is possible to keep only those trees in the final list, which degrees of vertices not exceeded some number ??. So, the complete graph on 8 vertices has 86 = 262 144 spanning trees. Among them 201 600 spanning trees which degree of vertices don't exceed 3, and 20 160 spanning trees with degree of vertices ? 2. Some modification of the main algorihm allows to receive the list of all crossing-free geometrical graph on top of ?? [3]. For example, if ?? consists of square tops, and also middle of its parties, the number of such a graph on top of ?? is equal to 21 795 (this number included also the empty graph). If to add to ?? the center of a square, this number will become to 167 570. In work is considered also a task about creation of all triangulations of a finite set ?? ? ??2. The algorithm of the solution of this task is available in [3]. The alternative description of algorithm of search is provided in this work. Example 9. Let ?? = ????,?? be a uniform lattice on the plane (see example 7). Then the number ????(??) of triangulations of ????,?? for small ?? and ?? is specified in the following table: ?? 2 2 2 3 3 4 ?? 2 3 8 6 7 5 ????(??) 2 6 3 432 182 132 2 801 708 2 822 648

Текст научной работы на тему «Об алгоритме перечисления остовов связного графа»

© Попов В.В., 2015

www.volsu.ru

прикладная математика

DOI: http://dx.doi.org/10.15688/jvolsu1.2015.2.1

УДК 517.518.85+517.27 ББК 22.144

об алгоритме перечисления остовов связного графа

Попов Владимир Валентинович

Кандидат физико-математических наук, доцент кафедры компьютерных наук и экспериментальной математики,

Волгоградский государственный университет popov_v_v@rambler.ru, kiem@volsu.ru

просп. Университетский, 100, 400062 г. Волгоград, Российская Федерация

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

Ключевые слова: связный граф, планарный граф, остовное дерево, число остовных деревьев, триангуляция, число триангуляций, выпуклая оболочка.

1. Задача построения всех остовных деревьев связного графа

Пусть дан связный неориентированный граф G = (V., Е) с конечным числом вершин, не содержащий петель и кратных ребер. Требуется перечислить все его остовные деревья. В работе [2, с. 180, Следствие 2, с. 191] описан метод решения этой задачи, основанный на переборе миноров матрицы инцидентности графа. Там же (с. 191-193) приведен алгоритм четырех японских математиков (И. Касахара, К. Тезука, Линг Шун Тонг и Т. Китахаши [6]), сводящийся к раскрытию скобок в произведениях формальных сумм ребер графа. В данной работе предлагается алгоритм, основанный на переборе последовательностей ребер графа.

Напомним, что остовным деревом (или остовом) связного графа называется дерево, связывающее все вершины графа и составленное из его ребер. Дерево — это связный

6 ISSN 2222-8896. Вестн. Волгогр. гос. ун-та. Сер. 1, Мат. Физ. 2015. № 2 (27)

прикладная математика

граф без циклов. Остовное дерево называют также охватывающим деревом. Все необходимые определения можно найти в работах [1;2;5;6].

Будем считать, что вершинами графа G являются числа 1, 2, 3, ..., п, где п — число вершин графа.

На множестве Z х Z упорядоченных пар целых чисел рассмотрим лексикографический порядок:

(а, b) < (а', Ь')

а < а1 или а = а1 и b < Ь'.

Пусть т > 1 — целое число. Обозначим через Sm множество последовательностей е1, е2, ..., ет длины т, где е1 < е2 < ... < ет и е* Е Z х Z при всех г. На множестве

Sm рассмотрим лексикогрфический порядок:

6l, 62, . . . , &т &2i

с1

е1 < или

е1 = е[, е2 < е'2 или

е1 = е[, е2 = е'2, е3 < е'3 или

Через (а,Ь) будем обозначать ребро, соединяющее вершины а и Ь. При этом считаем, что а < Ь, поскольку G — неориентированный граф, не имеющий петель.

Пусть Т — остовное дерево в графе G. Известно, что число ребер остовного дерева графа на п вершинах равно п — 1 [1;5]. Поэтому множество ребер дерева Т можно представить в виде упорядоченной последовательности Е' = Е'т, состоящей из ребер графа:

Е' = el,e2,eз,... ,en-l, (1)

где

ei = (a>i, bi),ai, bi Е Z при г = 1, 2,...,п — 1.

Не теряя общности, будет считать, что е\ < е2 < ... < еп-\, то есть

«1 < а2 < а3 < ... < an-i (2)

и при любом i < п — 1 верно а% < bi, а также

ai < ai+i или ai = ai+i и bi < bi+i. (3)

При этом а1 = 1 и Ь1 > 1, поскольку вершина 1 связана некоторым ребром дерева Т хотя бы с одной вершиной графа.

Наименьшим (в смысле порядка «^») остовным деревом будет дерево с ребрами (1,2), (1,3), (1,4), ..., (1,п) при условии, что (1, Ь) Е Е при b = 2, 3,... ,п. Наибольшим остовным деревом будет дерево с ребрами (1,п), (2,п), (3,п), ..., (п — 1,п) при аналогичном условии. Перебирая все элементы множества Sn-1 в порядке возрастания между указанными наборами ребер и проверяя отсутствие циклов и наличие связности у соответствующих наборов, сможем перечислить все остовные деревья графа.

Алгоритм перебора остовных деревьев связного графа

ВХОД: число п вершин связного графа G = (V, Е) и множество Е его ребер (множество Е может задаваться явно — как список ребер, или неявно — через матрицу смежности или через матрицу инцидентности).

ВЫХОД: список S всех остовных деревьев графа G.

ISSN 2222-8896. Вестн. Волгогр. гос. ун-та. Сер. 1, Мат. Физ. 2015. № 2 (27) 7

прикладная математика

В процессе работы алгоритма формируется и корректируется упорядоченная последовательность Е', состоящая из ребер графа. В начале работы алгоритма число к членов этой последовательности равно 0. Через пот обозначается порядковый номер строящегося остовного дерева. Наборы ребер остовных деревьев записываются в список S остовных деревьев. В начале работы алгоритма этот список пуст.

1) Полагаем S = 0, к = 0, пот = 0, х = 1 и у = 2.

2) Если у <п и (х,у) ф Е, то увеличиваем у на 1 и идем к пункту 2.

3) Если к > 0, у < п и добавление ребра (х,у) к графу Gk = (V,E') создает цикл, то увеличиваем у на 1 и идем к пункту 2.

4) Если у > п, то увеличиваем х на 1, полагаем у = х + 1 и идем к пункту 2.

5) Если х > п и к = 0, то завершаем работу.

6) Если х > п и к > 0, то полагаем х = ак, у = Ьк + 1, уменьшаем к на 1 и идем к пункту 2.

7) Увеличиваем к на 1, полагаем ак = х, Ък = у, увеличиваем у на 1 и идем к пункту

2.

8) Если к < п — 1, то увеличиваем к на 1 и идем к пункту 2.

9) Построенная последовательность ребер Е' = ((аь Ъ\), (а2,Ь2),..., (an-l, bn-i)) образует остовное дерево. Увеличиваем счетчик пот на 1 и добавляем Е' в список S остовных деревьев (под номером пот).

10) Уменьшаем к на 1, полагаем х = ак, у = Ьк + 1 и идем к пункту 2.

Можно дать альтернативное описание алгоритма перечисления остовов в виде обхода вершин некоторого ориентированного дерева.

Пусть задано ориентированное дерево V с конечным числом вершин и корнем d. Пусть в каждую вершину этого дерева можно попасть из корня, перемещаясь по дугам. Пусть для каждой вершины v на множестве дуг, исходящих из v, задан некоторый линейный порядок «^». Пусть также V0 — множество листьев дерева, то есть таких вершин и, из которых нет исходящих дуг. Тогда можно обойти вершины дерева V, побывав в каждом листе ровно один раз. Для этого надо использовать поиск в глубину [1;5;6], начиная поиск с корня и придерживаясь таких правил:

• Если мы попадаем по дуге (u,v) в вершину v и существует хотя бы одна непройденная дуга, исходящая из вершины v, то выбираем наименьшую (в смысле порядка «^») непройденную дугу (v,w) и по ней перемещаемся в вершину w.

• Если мы попали в вершину v по дуге (u,v) и из вершины v нет выходящих дуг или все выходящие дуги уже пройдены, то возвращаемся назад в вершину и.

• Если мы возвратились в вершину и по некоторой дуге и из этой вершины выходит хотя бы одна ранее не пройденная дуга, то движемся вперед по наименьшей (в смысле порядка «^») из таких дуг.

Чтобы получить список всех остовов графа G, надо определить дерево V следующим образом. Его вершинами являются упорядоченные наборы упорядоченных пар целых чисел

ei = (ai, bi), е2 = («2, b2)) ез = (аэ, Ьз),... ,ек = (ак, Ьк),

8 В.В. Попов. Об алгоритме перечисления остовов связного графа

прикладная математика

где 1 < к < п, е1 < е2 < ... < ек и а» < bi при всех г. Пусть также V содержит пустой

набор 0, который является корнем дерева.

Пусть и = ei,e2,...,е& и v = е'1,е'2,... ,e'l две вершины дерева V. Из вершины и в вершину v идет дуга тогда и только тогда, когда I = к +1 и е* = е( при г = 1, 2,..., к. Иными словами, (u,v) — дуга в том и только том случае, когда набор v получается из набора и путем добавления в конец набора и некоторой упорядоченной пары е&+1 целых чисел.

Пусть и = е1,е2,... ,ек — вершина дерева V и к < п — 1. Тогда из и выходит хотя бы одна дуга. Введем на множестве дуг, выходящих из и, отношение порядка «^». Пусть имеется две дуги (u,v) и (u,v'). Тогда v и v' получаются из набора и путем добавления в конец набора и некоторых различных пар целых чисел е&+1 и е'к+1 соответственно.

Тогда считаем, что (u,v) -4 (u,v') в том и только том случае, когда е^+1 < е'к+1. Ясно, что листьям построенного дерева будут соответствовать остовные деревья исходного графа.

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

Пример 1. Для полных графов на п вершинах при п < 9 получены списки всех остовных деревьв. Число остовных деревьев для таких графов по теореме Кэли равно пп—2 [1;4-6]. Например, при п = 9 число остовов равно 4 782 969.

Пример 2. Рассмотрим граф на 12 вершинах, изображенный слева на рисунке 1. Он имеет 2 415 остовных деревьев. Приведем списки первых трех остовов этого графа, а также последних трех остовов (в левой колонке указан порядковый номер остова при лексикографическом упорядочении, в правой — список ребер остова):

1 (1,2), (1, 5), (2, 3), (2,6), (3, 4), (3, 7), (4, 8), (5, 9), (6,10), (7,11), (8,12)

2 (1,2), (1, 5), (2, 3), (2,6), (3, 4), (3, 7), (4, 8), (5, 9), (6,10), (7,11), (11,12)

3 (1,2), (1, 5), (2, 3), (2,6), (3, 4), (3, 7), (4, 8), (5, 9), (6,10), (8,12), (10,11)

2 413 (1,15), (2, 6), (3, 7), (4, 8), (5,9), (6 ,10), (7, 8), (7,11), (9, 10), (10, 11), (11, 12)

2 414 (1,5), (2, 6), (3, 7), (4,8), (5, 9), (6,10), (7, 8), (8,12), (9,10), (10,11), (11,12)

2 415 (1,5), (2,6), (3, 7), (4,8), (5,9), (6,10), (7,11), (8,12), (9,10), (10,11), (11,12)

9 10 11 12

8 4

5 6 7 (

1 2 3

7 • 00 .9

4 .5 .6

1 .2 • СО .10 .11

Рис. 1

Пусть Р — конечный набор точек плоскости. Геометрический граф G = (V,E) с носителем Р — это граф, вершинами которого являются точки из Р, а ребрами — прямолинейные отрезки, соединяющие эти вершины, причем отрезки могут пересекаться только в точках набора Р. Такие графы изучались многими авторами (в иностранных работах — под названием crossing-free geometrical graph, см., например, [5; 6]). Если

ISSN 2222-8896. Вестн. Волгогр. гос. ун-та. Сер. 1, Мат. Физ. 2015. № 2 (27) 9

прикладная математика

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

Пример 3. Пусть Р — множество вершин квадрата, а также его центр. Тогда имеется 45 остовов.

Пример 4. Пусть Р состоит из вершин квадрата, а также середин его сторон. Тогда имеется 3 273 остова.

Пример 5. Пусть Р состоит из вершин квадрата, середин его сторон, а также центра квадрата. Тогда число остовов равно 24 965.

Пример 6. Рассмотрим множество точек, изображенное на рисунке 1 справа. Если оставить в этом множестве первые п вершин, то для полученного множества Р = Рп число остовов таково:

n 7 8 9 10 11

Число остовов 1 018 6 164 24 965 169 458 854 692

Приведем списки ребер некоторых остовов для множества Рц (в левой колонке указан порядковый номер остова при лексикографическом упорядочении, в правой — список ребер остова):

1 (1, 2), (1,4), (1, 5), (1, 6), (1,8), (2, 3), (3,10), (4, 7), (5,9), (6,11)

2 (1, 2), (1,4), (1, 5), (1, 6), (1,8), (2, 3), (3,10), (4, 7), (5,9), (9,11)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

3 (1, 2), (1,4), (1, 5), (1, 6), (1,8), (2, 3), (3,10), (4, 7), (5,9), (10,11)

100 000 (1, 2), (1,4), (2, 7), (3, 5), (5,6), (5 ,11), (6, 7), (7,8), (8,9), (10, 11)

100 001 (1, 2), (1,4), (2, 7), (3, 5), (5, 6), (5,11), (6, 7), (7, 8), (9,11), (10,11)

200 000 (1, 2), (1,6), (2, 3), (4, 5), (4, 7), (5, 6), (6, 9), (7,8), (9, 10), (10, 11)

200 001 (1, 2), (1,6), (2, 3), (4, 5), (4, 7), (5, 6), (6, 9), (7,8), (9,11), (10,11)

300 000 (1, 2), (2, 3), (3, 4), (4, 5), (4,10), (6, 7), (7, 10), (8 , 9), (9, 10), (9,11)

300 001 (1, 2), (2, 3), (3, 4), (4, 5), (4,10), (6, 7), (7,10), (8, 9), (9,10), (10,11)

Пример 7. Рассмотрим на плоскости множество из п ■ т точек:

Ln,m {(*, j) : * 1,2,..., и, j 1,2,..., т\,

где п,т > 1 — целые числа. Таким образом, Ln,m — равномерная решетка, точки которой лежат на п горизонтальных прямых и на т вертикальных прямых. Число остовов этой решетки при небольших п и т указано в следующей таблице:

п 2 2 2 2 2 3 3

т 2 3 4 5 6 3 4

Число остовов 12 169 2 665 44 329 759 114 24 965 4 595 581

10

В.В. Попов. Об алгоритме перечисления остовов связного графа

прикладная математика

При перечислении остовных деревьев можно осуществлять фильтрацию. Например, можно оставлять в итоговом списке только те деревья, степени вершин которых ограничены заданным числом. Так, полный граф на 8 вершинах содержит 86 = 262 144 остова. Среди них 201600 остовов, степени вершин которых не превосходят 3 и 20160 остовов со степенями вершин, не большими 2.

Незначительная модификация описанного выше алгоритма обхода дерева позволяет получить список всех геометрических графов (crossing-free geometrical graph), определяемых множеством точек на плоскости. Для этого надо к набору приведенных выше правил добавить следующее:

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

Например, если Р состоит из вершин квадрата, а также середин его сторон, то число определяемых множеством Р геометрических графов равно 21 795 (в это число включен и пустой граф). Если же добавить к Р и центр квадрата, то число геометрических графов будет равно 167 570.

2. Распараллеливание алгоритма перечисления остовов

Пусть поставлена задача о перечислении всех остовных деревьев заданного связного графа. Требуется разбить ее на р > 2 подзадач.

Способ 1. Разбиваем область поиска (то есть множество Sn-1 всех последовательностей из п — 1 ребра) на р частей (отрезков относительно лексикографического порядка «^»), состоящих приблизительно из одинакового числа последовательностей, и пусть каждый процессор обрабатывает свою часть.

При таком способе каждый процессор должен знать только список ребер графа и границы отрезка, на котором надо осуществлять поиск. Кроме того, надо сбрасывать в общий список набор найденных деревьев. Однако число остовных деревьев на разных отрезках может оказаться различным и часть процессоров будет простаивать после завершения своей части работы. Рассмотрим, например, множество точек Р, изображенное слева на рисунке 2.

.6 .7

.2 .3 .4 .5

.1

7 к ,8 1

h i

,4 / 5 9 ,

с d

.1 а 2 b .

9

3

6

е

3

Рис. 2

Для этого множества существует 1 302 остовных дерева. Однако если область поиска разбить на 4 отрезка, состоящих из примерно одинакового числа последовательностей, то на одном из участков будет 618 остовных деревьев, а на других — соответственно 345, 207 и 132.

11

ISSN 2222-8896. Вестн. Волгогр. гос. ун-та. Сер. 1, Мат. Физ. 2015. № 2 (27)

прикладная математика

Способ 2. Разбиваем область поиска на К■ р частей (отрезков), где К > 2 — целое число (например, К = 10). Первые р — 1 процессоров начинают обрабатывать первые р — 1 отрезков множества Sn-\, а процессор с номером р будет координировать работу остальных: если какой-то процессор завершает поиск на своем участке, то он сообщает об этом процессору с номером р и получает от него границы нового участка, на котором надо провести поиск.

3. Сравнение методов перечисления остовных деревьев графа

Напомним описание упомянутого в первой части работы алгоритма построения всех остовов графа, предложенного четырьмя японскими математиками в 1962 г. (И. Ка-сахара, К. Тезука, Линг Шун Тонг и Т. Китахаши, [6], см. также [2, с. 192]). Пусть дан граф G с множеством вершин V = {v\,v2,... ,vn} и множеством ребер Е = = {щ,и2,... ,ит}. Алгоритм предполагает выполнение следующих шагов:

1) Составляем матрицу инцидентности А графа G и выбираем такое множество вершин V0 С V, что строки, соответствующие вершинам из V0, образуют базис системы строк матрицы А над полем Z2 = {0,1} из двух элементов.

2) Каждой вершине v G Vo сопоставляем формальную сумму

S (v) = Ui1 + щ2 + ... + Uik,

где Ui1 ,Ui2 ,...,Uik — список всех ребер, инцидентных вершине v, а к — число таких ребер, то есть степень вершины v.

3) Составляем произведение Р сумм S(v) по все вершинам v G V0, заключив каждую такую сумму в скобки.

4) Раскрываем скобки в произведении Р и приводим подобные члены над полем Z2 при дополнительных соотношениях и\ = 0, и"2 = 0, ..., \Ат = 0. Тогда Р будет представлено в виде слагаемых вида а ■ Uj1 ■ Uj2 ■ ... ■ Ujn-1, где а равно 0 или 1, а множители Uj1, щ2, ..., Ujn-1 различны. При этом каждое такое слагаемое, для которого а = 1, будет соответствовать ровно одному остову графа, составленному

из ребер Uj1, Uj2, .. ., Ujn_ 1.

Рассмотрим, например, граф, изображенный на рисунке 2 справа. Ребра этого графа обозначены (для упрощения записи) переменными без индексов а, Ь, с и т. д. (вместо щ, и2, и3, ...). При естественной нумерации вершин и ребер графа его матрица инцидентности имеет вид

( 1 0 1 0 0 0 0 0 0 0 0 0

1 1 0 1 0 0 0 0 0 0 0 0

0 1 0 0 1 0 0 0 0 0 0 0

0 0 1 0 0 1 0 1 0 0 0 0

А = 0 0 0 1 0 1 1 0 1 0 0 0

0 0 0 0 1 0 1 0 0 1 0 0

0 0 0 0 0 0 0 1 0 0 1 0

0 0 0 0 0 0 0 0 1 0 1 1

V 0 0 0 0 0 0 0 0 0 1 0 1

12 В.В. Попов. Об алгоритме перечисления остовов связного графа

прикладная математика

Последняя строка равна сумме всех остальных строк (в поле Z2), а первые восемь строк линейно независимы. Поэтому за Vo можно принять множество вершин {1,2,3,..., 7, 8}. В этом случае

Р = (а + с)(а + b + d)(b + е)(с + / + h)(d + / + д + i)(e + д + j )(h + k)(i + fc + /).

При раскрытии всех скобок возникнет 2 592 слагаемых, из которых 192 не содержат квадратов переменных и поэтому определяют ровно по одному из остовов графа. При реализации в виде компьютерной программы процесс раскрытия скобок соответствует поиску в ширину на графе, поэтому при работе такая программа требует много дополнительной памяти (по сравнению с поиском в глубину) и имеет более сложную структуру. Кроме того, неясно, как применить этот алгоритм при поиске остовов геометрических графов.

4. Триангуляции многоугольника на плоскости

Пусть F — замкнутый многоугольник на плоскости и Р = {р1,р2,... ,рп} — такое его конечное подмножество, которое содержит все вершины F. Необходимо перечислить все триангуляции многоугольника F, вершинами которых являются точки множества Р. Алгоритм решения этой задачи описан в [3]. Дадим альтернативное описание этого алгоритма. Не теряя общности, будем считать, что отрезок [pi,p2] является стороной многоугольника F.

Рассмотрим дерево V, вершинами которого являются такие упорядоченные наборы Д1, Д2,..., Дк треугольников с вершинами из множества Р, объединение которых является связным множеством и которые можно достроить до триангуляции на Р путем добавления (справа) других треугольников (с вершинами из Р), или эти наборы уже сами являются триангуляциями на Р. Кроме того, дерево V содержит пустой набор 0, который является корнем дерева. Пусть и = Д1, Д2,..., Дк и v = Д[, Д'2,..., Д{ две вершины дерева V. Тогда из вершины и в вершину v идет дуга тогда и только тогда, когда I = к + 1 и Дг = Д' при i = 1, 2,... ,к. Иными словами, (и, v) — дуга в том и только том случае, когда набор v получается из набора и путем добавления в конец набора и некоторого треугольника. Триангуляциям многоугольника F (с дополнительными точками из Р) соответствуют листья дерева V.

Пусть и = Д1, Д2,..., Дк — вершина дерева V, не являющаяся триангуляцией. Тогда из и выходит хотя бы одна дуга. Введем на множестве дуг, выходящих из и, отношение порядка «^». Пусть имеется две дуги (u,v) и (u,v'). Тогда v и v’ получаются из набора и путем добавления в конец набора и некоторых треугольников Д&+1 и Д'к+1 соответственно. Эти треугольники имеют общие отрезки с некоторыми треугольниками набора и. Пусть а, b и а', Ь' — номера вершин этих отрезков. Не теряя общности, считаем, что а < b и а' <Ь'. Пусть также с и d — номера третьих вершин треугольников Д^+1 и Дк+1. Тогда считаем, что (u,v) ^ (u,v') в том и только том случае, когда а < а1 или когда а = а' и b < Ь' или когда а = а', b = Ь' и с < d. Таким образом, «^» является модификацией лексикографического порядка.

Напомним, что нумерация вершин множества Р такова, что отрезок [р1,р2\ является стороной многоугольника F. Поэтому из корня 0 дерева Р идут дуги вида (0,v), где набор v состоит из единственного треугольника Д1, номера вершин которого 1, 2 и j, где 2 < j < п. Если другая дуга (0,v’) определяет тройку чисел 1, 2, j’, то считаем, что (0,v) ^ (0,v) тогда и только тогда, когда j < j'.

ISSN 2222-8896. Вестн. Волгогр. гос. ун-та. Сер. 1, Мат. Физ. 2015. № 2 (27) 13

прикладная математика

Теперь для построения всех триангуляций на Р надо осуществить обход всех вершин дерева 'D поиском в глубину, начиная поиск с корня дерева. Таким способом можно получить следующие результаты.

Пример 8. Пусть Р = Рц — множество из 11 точек, изображенное на рисунке 1 справа, и пусть F — выпуклая оболочка Р. Тогда число триангуляций равно 302.

Пример 9. Пусть Lnm — равномерная решетка на плоскости (см. пример 7). Число ее триангуляций при небольших п и т указано в следующей таблице:

п 2 2 2 3 3 4

т 2 3 8 6 7 5

Число триангуляций 2 6 3 432 182 132 2 801 708 2 822 648

список литературы

1. Зыков, А. А. Основы теории графов / А. А. Зыков. — М. : Наука, 1987. — 384 с.

2. Зыков, А. А. Теория конечных графов / А. А. Зыков. — Новосибирск : Наука, 1969. — 554 с.

3. Клячин, В. А. Метод цепей для организации хранения многомерных триангуляций / В. А. Клячин, В. В. Попов // Вестник Волгоградского государственного университета. Серия 1, Математика. Физика. — 2013. — № 2 (19). — С. 71-79.

4. Aichholzer, О. On the Number of Plane Geometrical Graphs / O. Aichholzer, T. Hackl, B. Vogtenhuber, С. Huemer, F. Hurtado, H. Krasser // Graphs and Combinatorics. — 2007. — № 23. — P. 67-84.

5. Diestel, R. Graph Theory / R. Diestel. — N. Y. : Springer-Verlag, 2000. — 384 p.

6. Kasahara, Y. Topological evaluation of a system determinants / Y. Kasahara, K. Tezuka,

S. T. Ling, T/ Kitahashi // Technol. Repts. Osaka Univ. — 1962. — № 12. — P. 239-248.

references

1. Zykov A.A. Osnavy tearii grafav [Introduction to Graph Theory]. Moscow, Nauka Publ., 1987. 384 p.

2. Zykov A.A. Teariya kaneohnykh grafav [Finite Graph Theory]. Novosibirsk, Nauka Publ., 1969. 554 p.

3. Klyachin V.A., Popov V.V. Metod tsepey dlya organizatsii khraneniya mnogomernykh triangulyatsiy [Chanes Method for Storage of Multidimensional Triangulation]. Vestnik Valgagradskaga gasudarstvennaga universiteta. Seriya 1, Matematika. Fizika [Science Journal of Volgograd State University. Mathematics. Physics], 2013, no. 2 (19), pp. 71-79.

4. Aichholzer O., Hackl T., Vogtenhuber B., Huemer C., Hurtado F., Krasser H. On the Number of Plane Geometrical Graphs. Graphs and Cambinatarios, 2007, no. 23, pp. 67-84.

5. Diestel R. Graph Theory. N. Y., Springer-Verlag, 2000. 384 p.

6. Kasahara Y., Tezuka K., Ling S.T., Kitahashi T/ Topological evaluation of a system determinants. Teohnal. Repts. Osaka Univ., 1962, no. 12, pp. 239-248.

14

B.B. Попов. Об алгоритме перечисления остовов связного графа

прикладная математика

on algorithm of numbering the spanning trees in a connected graph

Popov VLaDimir VaIcnTinovicH

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Candidate of Physical and Mathematical Sciences, Associate Professor, Department of Computer Sciences and Experimental Mathematics,

Volgograd State University popov_v_v@rambler.ru, kiem@volsu.ru

Prosp. Universitetsky, 100, 400062 Volgograd, Russian Federation

ABsTracT. Let G = (V., E) be a finite connected graph without multiple edges or loops. We consider the task about the numbering of all the spanning trees of G. In [2, p. 180, p. 191] described a method of solution of this task, based on the properties of minors of an incidence matrix of G. In the same place (p. 191-193) gave algorithm of four Japanese mathematicians (Kasahara Y., Tezuka K., Ling Shun Tong, Kitahashi T., [6]), reduced the task to removal of brackets in the product of formal sums of edges of G. Here we concider the method based on lexicographical order on the set of all sequences of edges of G.

We will remind that a spanning tree T of the graph G is a tree consisting of edges of G and connecting all the vertices of G.

We shall assume that V = {1, 2,..., n}, where n is a number of vertices of G. If a,b e V, then (a,b) will be designated the edge with end-points a and b.

Let T be a spanning in G. Then the set of his edges can be written in the

form

(ai,bi), (a2, b2),..., (an-i,bn-i), (A)

where

ai < ai+1 or ai = a^+i and bi < bi+1, where i = 1,2,... ,n — 2. (B)

On a set of sequences of in the form of (A) with the additional condition (B) we will consider a lexicographic order. The smallest (with respect to this order) spanning tree will be the tree T0 with edges (1,2), (1,3), (1,4), ..., (1, n) provided (1,6) e E for b = 2, 3,... ,n. The greatest spanning tree T1 will be (1,n), (2,n), (3,n), ..., (n — 1,n) under a similar condition. Touching all sequences of a look (A) in ascending order between T0 and T1 and checking lack of cycles at the corresponding sets of edges, we will be able to get a list of all spanning trees.

We will give results of work of the appropriate computer program.

ExAMpLe 1. For complite graph Kn on n vertices for n < 9 the lists of all the spanning trees are obtained. Due to Kely theorem Kn has nn~2 spanning trees. For n = 9 thos number is equal 4 782 969.

ExAMpLe 2. Let G be a graph on 12 vertices in figure 1 (in the left). Then G has 2 415 spanning trees.

Let P be a finite set of points in the plane R2. Then G = (V,E) is a plane geometrical graph on top of P, if V C R2 and egdes of G are stright-line segments with the end-points in P and two edges of G intersects only in points of P [3]. If G is a tree and V = P, then G called a spanning tree on top of P.

ExAMpLe 3. Let P be a set of square tops, and also its center. Then there are 45 spanning trees on top of P.

ISSN 2222-8896. Вестн. Волгогр. гос. ун-та. Сер. 1, Мат. Физ. 2015. № 2 (27)

15

прикладная математика

Example 4. Let Р consists of square tops, and also middle of its parties. Then there are 3 273 spanning trees on top of P,

Example 7. We will consider a set P = Ln,m consisting of n • m points on the plane:

Ln,m = i(i,j) : i = 1,2,...,n, ж = 1, 2,... ,m},

where n,m > of 1 are integers, Thus, Ln,m is a uniform lattice which points lie on n horizontal straight lines and for m vertical straight lines, The numbers St(P) of a spanning trees on top of this lattice for small n and m it is specified in the following table:

п 2 2 2 2 2 3 3

т 2 3 4 5 6 3 4

St(P) 12 169 2 665 44 329 759 114 24 965 4 595 581

At transfer the spanning trees it is possible to carry out a filtration, For example, it is possible to keep only those trees in the final list, which degrees of vertices not exceeded some number r, So, the complete graph on 8 vertices has 86 = 262 144 spanning trees, Among them 201 600 spanning trees which degree of vertices don’t exceed 3, and 20 160 spanning trees with degree of vertices < 2, Some modification of the main algorihm allows to receive the list of all crossing-free geometrical graph on top of P [3], For example, if P consists of square tops, and also middle of its parties, the number of such a graph on top of P is equal to 21 795 (this number included also the empty graph), If to add to P the center of a square, this number will become to 167570,

In work is considered also a task about creation of all triangulations of a finite set P C R2, The algorithm of the solution of this task is available in [3], The alternative description of algorithm of search is provided in this work,

Example 9. Let P = Ln,m be a uniform lattice on the plane (see example 7), Then the number Tr(P) of triangulations of Ln,m for small n and m is specified in the following table:

п 2 2 2 3 3 4

т 2 3 8 6 7 5

Тг(Р) 2 6 3 432 182132 2 801708 2 822 648

Key words: connected graph, planar graph, spanning tree, the number of spanning trees, triangulation, the number of triangulations,

16

B.B. Попов. Об алгоритме перечисления остовов связного графа

i Надоели баннеры? Вы всегда можете отключить рекламу.