МАТЕМАТИКА
www.volsu.ru
DOI: https://doi.Org/10.15688/jvolsu1.2016.5.8
УДК 517.518.85+517.27 ББК 22.144
О ПАРАЛЛЕЛЬНОМ АЛГОРИТМЕ ПЕРЕЧИСЛЕНИЯ ТРИАНГУЛЯЦИЙ МНОГОУГОЛЬНИКА НА ПЛОСКОСТИ
Владимир Валентинович Попов
Кандидат физико-математических наук, доцент кафедры компьютерных наук и экспериментальной математики, Волгоградский государственный университет [email protected], [email protected]
просп. Университетский, 100, 400062 г. Волгоград, Российская Федерация
Аннотация. В статье описывается параллельный алгоритм перечисления всех триангуляций многоугольника на плоскости. Дается оценка необходимой для реализации алгоритма памяти. Обсуждается быстродействие алгоритма и возможность его применения для компактной записи списка всех трингуляций.
Ключевые слова: триангуляция, число триангуляций, дерево триангуляций, оценка объема памяти, число Каталана, выпуклая оболочка.
1. Задача построения всех триангуляций многоугольника на плоскости
Вопрос о построении триангуляций множества точек на плоскости рассматривался многими авторами (см., например, [5-8]). В работе [1] предложен алгоритм построения всех триангуляций конечного множества на плоскости. Соответствующий алгоритм для трехмерного пространства описан в [2]. В работе [8] изучается граф, вершинами которого являются триангуляции конечного набора точек Р С R2, причем две триангуляции связаны ребром в том и только том случае, когда найдутся четыре точки множества Р, являющиеся вершинами выпуклого четырехугольника, такие, что в одной триангу-со ляции этот четырехугольник разбит на два треугольника одной диагональю, а в другой § триангуляции — другой диагональю (все остальные треугольники в этих триангуля-шг циях одинаковы). Переход от одной триангуляции к другой в этом случае называется со перестроением (или флипом, flipping). В работе [3] строится другое дерево, вершина-
m / и
о ми которого являются триангуляции (а также другие прямолинейные геометрические с графы) с вершинами в заданном конечном подмножестве плоскости. @ В данной статье рассматривается следующая задача.
На плоскости дан замкнутый многоугольник Р и конечное множество точек Р = = {р\,р2,... ,Рм}, включающее все вершины этого многоугольника. Необходимо перечислить все триангуляции многоугольника Р относительно набора точек Р.
Ниже предлагается параллельный алгоритм решения этой задачи. Часть результатов объявлена в [4].
Под многоугольником понимается область плоскости, ограниченная замкнутой неса-мопересекающейся ломаной. Триангуляция Т многоугольника Р относительно набора точек Р — это набор треугольников ¿1, Б2, ..., 8т, удовлетворяющий следующим условиям:
(1) Каждая точка рг € Р является вершиной хотя бы одного из треугольников Sj.
(2) Вершины любого треугольника Sj лежат во множестве Р.
(3) Если г = ], то треугольники и 8^ или не пересекаются, или имеют только общую вершину, или только общее ребро.
(4) Объединение треугольников Б2, ..., Бт совпадает с многоугольником Р.
Через Тг(Р, Р) будем обозначать множество всех триангуляций набора точек Р,
удовлетворяющих условиям (1)-(4). Таким образом, необходимо перечислить все триангуляции Т € Тг(Р,Р). При построении параллельного алгоритма решения этой задачи используется понятие перегородки.
Пусть I — прямая, пересекающая многоугольник Р и не содержащая точек множества Р. Назовем перегородкой, определяемой тройкой Р, Р, I, набор треугольников П, который удовлетворяет таким условиям:
(a) Вершины любого треугольника 8 € П лежат во множестве Р.
(b) Различные треугольники 8,8' € П или не пересекаются, или пересекаются по общей вершине или по общему ребру.
(c) Объединение всех треугольников 8 € П содержит множество Р П I и само содержится в Р.
На рисунке 1 слева изображен многоугольник Р, множество Р и прямая I, в центре — одна из триангуляций Т € Тг(Р,Р), а справа — соответствующая этой триангуляции перегородка П (треугольники, составляющие перегородку, изображены серым цветом).
Рис. 1. Многоугольник Р, множество Р и прямая I (слева), одна из триангуляций (в центре) и соответствующая этой триангуляции перегородка П (справа)
Как уже указывалось выше, в [1] описан алгоритм перечисления всех триангуля-ций конечного множества на плоскости. Опишем более компактный алгоритм, который можно применять не только к многоугольникам, но и к объединениям конечного числа многоугольников. Последнее важно для построения параллельного алгоритма.
2. Последовательный алгоритм построения триангуляций многоугольника Р
относительно набора точек Р
На каждом шаге алгоритма будет определен набор треугольников
Sl, ¿2,..., 5'fc—1, (1)
который можно достроить до некоторой триангуляции многоугольника Р относительно набора точек Р. Через а^ Ьг и сг будем обозначать номера точек множества Р, являющихся вершинами треугольника г =1, 2,... ,к — 1.
Будем использовать также следующие обозначения: (%,]) — ребро (прямолинейный отрезок), соединяющее вершины множества Р с номерами г и ]. Ребра считаем неориентированными, поэтому ребро (%,]) совпадает с ребром (],%); к — номер строящегося треугольника;
т — число треугольников в любой триангуляции множества Р\. Это число
определяется после того, как построена первая триангуляция; Ыг — число всех триангуляций множества Р относительно многоугольника Р, то есть Ыг = \Тг(Р,Р)|. В начале работы алгоритма Ыг = 0.
Функция Df (%,]) позволяет узнать — является ли (%,]) стороной (граничным отрезком) многоугольника Р или нет. В первом случае Df(%,]) равно 1, а во втором 0. Если (%,]) — некоторое ребро, то будем называть его кратностью число треугольников в последовательности (1), для которых это ребро является стороной. Если кратность ребра (г,]) равна 1 и (г,]) = 0, то будем называть это ребро граничным. Если граничное ребро появилось при добавлении треугольника Бк, то оно будет запоминаться как ребро (ик,Ьк). Если же при добавлении треугольника Бк граничное ребро не появилось, то переменной ик присваивается значение 0. Если е = (ик,Ук) — граничное ребро (возникшее при добавлении треугольника Як) и в дальнейшем к последовательности (1) был добавлен треугольник Бг, I > к, для которого ребро е является стороной, то е перестанет быть граничным. Этот факт фиксируется путем присвоения переменной Гк значения I. Для граничного ребра Гк = 0.
На каждом шаге работы алгоритма будет определено базовое ребро (г1 ,г2), к которому будет подыскиваться число ] такое, что треугольник с номерами вершин г1, г2 и ] можно добавить к последовательности (1) в качестве Бк. Это будет осуществляться с помощью функции f (г1,г2,г3), которая и возвращает нужное ] с дополнительным условием г3 < ] < N. Если такого ] не найдено, то возвращается значение 0.
Функция д(к) находит наименьшее целое число ], для которого 1 < ] <к и (uj ) является граничным ребром для последовательности (1). Если такого ] не найдено, то д(к) возвращает значение 0.
Алгоритм построения списка триангуляций ДАНО: многоугольник Р на плоскости (не обязательно выпуклый);
множество Р из N точек плоскости, лежащее в Р и содержащее все вершины многоугольника Р;
базовое ребро (г1,г2), являющееся стороной многоугольника Р. ПОЛУЧИТЬ: список всех триангуляций многоугольника Р относительно множества Р.
1) Полагаем к =1, т = 0 и Ыг = 0. При всех = 1, 2,... кратность ребра (%,]) полагаем равной 0. Полагаем также а1 = 11 и Ь1 = 12.
2) Полагаем Ck = 0.
3) Полагаем j = f (ak,bk,Ck). Если j < 0, то идем на пункт 8.
4) Полагаем Ck = j. Кратности ребер треугольника Sk (номера вершин которого ak, Ьк и Ck) увеличиваем на 1.
5) Если m > 0 и к > m, то идем на пункт 10.
6) Полагаем Uk = 0.
7) a) Если Df (ak,Ck) = 0 и кратность ребра (ak,Ck) равна 1, то полагаем ak+1 = ak и bk+1 = Ck. Если, дополнительно, Df (bk ,Ck ) = 0 и кратность ребра (bk ,Ск ) равна 1, то полагаем Uk = bk, Vk = Ck и rk = 0.
Увеличиваем к на 1 и идем к пункту 2.
b) Если Df (Ьк ,Ск ) = 0 и кратность ребра (Ьк ,Ск ) равна 1, то полагаем ак+1 = bk и Ьк+1 = Ck. Увеличиваем к на 1 и идем к пункту 2.
c) Увеличиваем к на 1 (и переходим на пункт 8).
8) Полагаем j = g (к). Если j < 0, то идем на пункт 10.
9) Полагаем ak = u[j], bk = v[j], Ck = 0, r[j] = к и идем на пункт 3.
10) Если ktr = 0, то полагаем m = к — 1.
Увеличиваем ktr на 1. Записываем список троек номеров вершин треугольников из последовательности (1), образующих полученную триангуляцию, в общий список триангуляций (под номером ktr).
11) Уменьшаем на 1 кратности ребер треугольников Sm и Sm-1 и полагаем к = m — 1 (тем самым эти треугольники удаляются из списка (1)).
12) При каждом i = 1, 2,... ,к, при котором г [г] > к, полагаем г [г] = 0.
13) Полагаем j = f (ak ,bk ,Ck ). Если j > 0, то идем к пункту 4.
14) Если к = 1, то завершаем работу алгоритма.
15) Уменьшаем к на 1. Уменьшаем на 1 кратности ребер треугольника Sk. Идем на пункт 12.
При компьютерной реализации описанного алгоритма необходимо хранить в памяти 8 одномерных массивов и 2 двумерных. Поэтому требуемая память — 0(N2). Однако можно уменьшить эту оценку до 0(N) (за счет некоторого снижения быстродействия).
3. Параллельный алгоритм построения триангуляций многоугольника
Пусть F — многоугольник на плоскости; Р С F — конечное множество, содержащее все вершины F, а I — прямая, не содержащая точек Р и пересекающая F. Пусть Т G Tr(F, Р) — триангуляция многоугольника F относительно множества Р. Обозначим через П множество треугольников S G Т, пересекающих I, а через П — объединение этих треугольников. Тогда П является перегородкой, определяемой тройкой F, Р и I. Прямая I разбивает плоскость на две полуплоскости Н1 и Н2. При г = 1, 2 обозначим через Ti множество треугольников S G Т, лежащих в Hi и не входящих в перегородку П. а через Fi — объединение треугольников, входящих в Т^. Тогда Т.\ — триангуляция Fi относительно множества Р П Fi. Таким образом, если задана некоторая триангуляция Т G Tr(F,P), то можно однозначно определить перегородку П и триангуляции Т1, Т2 многоугольников F1 и F2 относительно множеств F1 П Р и F2 П Р соответственно. Наоборот, по триангуляциям Т1 и Т2 однозначно восстанавливается триангуляция Т —
достаточно взять все треугольники, входящие в Ть Т2 и П.
Следовательно, для построения всех триангуляций Т G Tr(F, Р) можно поступить так: выбрать прямую I, пересекающую F и не пересекающую Р, а затем перебрать все перегородки, определяемые тройкой F, Р, I, и для каждой такой перегородки П построить все триангуляции многоугольников Fl и F2 (определяемых по F и П) относительно множеств Fi П Р и F2 П Р соответственно. Триангуляции многоугольников Fb F2 можно перечислять независимо друг от друга по описанному выше последовательному алгоритму. Осталось описать алгоритм построения всех перегородок, определяемых тройкой F, Р и I. Сделаем это.
Заметим, что прямую I следует выбирать так, чтобы по обе стороны от нее находилось приблизительно одинаковое число точек множества Р. Кроме того, расчеты упрощаются, если эта прямая — горизонтальная или вертикальная. Остановимся на случае горизонтальной прямой.
На каждом шаге алгоритма будет определен набор треугольников вида (1), который можно достроить до перегородки, определяемой многоугольником F, множеством Р и горизонтальной прямой I. Через kpr будем обозначать число всех перегородок. В начале работы алгоритма kpr = 0.
Многоугольник F может быть невыпуклым и потому может пересекать прямую I по нескольким отрезкам. Нам потребуется список всех ребер многоугольника F, пересекающих прямую I, отсортированный по возрастанию ж-координаты точки пересечения ребра с прямой I:
ei,e'i,e2,e'2,...,eq ,e'q. (2)
Здесь q — число отрезков, на которые распадается пересечение F П I. Через t будем обозначать порядковый номер такого отрезка. Если точка движется слева направо по прямой I, то после пересечения ребра et она попадает в многоугольник F, а после пересечения ребра e't выходит из него. Остальные обозначения — такие же, как в предыдущем алгоритме.
Алгоритм построения списка горизонтальных перегородок
ДАНО: многоугольник F на плоскости (не обязательно выпуклый);
множество Р из N точек плоскости, лежащее в F и содержащее все вершины многоугольника F;
горизонтальная прямая I, пересекающая многоугольник F и не содержащая точек множества Р. ПОЛУЧИТЬ: список всех перегородок, определяемых тройкой F, Р и I.
1) Составляем список ребер (2).
2) Полагаем к = 1, t = 1 и крг = 0.
3) Полагаем аи = г1 и bk = г2, где г1, г2 — номера вершин ребра et.
4) Полагаем Ск = 0.
5) Полагаем j = f(ак,Ък,ск).
6) Полагаем Ск = j. Если ребро (ак,Ск) пересекает прямую I, то полагаем ак+1 = ак и Ьк+1 = Ск. В противном случае полагаем ак+1 = Ск и bk+l = bk.
7) Если ребро (ak+l,bk+l) не совпадает с ребром е[, то увеличиваем к на 1 и идем к пункту 4.
8) Если t < q, то t увеличиваем на 1, к увеличиваем на 1 и идем к пункту 3.
9) Увеличиваем крг на 1. Записываем список троек номеров вершин треугольников, составляющих полученную перегородку, в общий список перегородок (под номером крг).
10) Полагаем j = f (ak,bk,Ck). Если j > 0, то идем к пункту 6.
11) Если к = 1, то завершаем работу алгоритма.
12) Если ребро (ak,bk) совпадает с ребром et, то уменьшаем t на 1, уменьшаем к на 1 и идем к пункту 10.
13) Уменьшаем к на 1 и идем к пункту 10.
При реализации описанного алгоритма необходимо хранить в памяти только 3 одномерных массива длины N каждый (и список ребер (2), размер которого обычно существенно меньше N). Поэтому требуемая память — 0(N).
4. Сравнение параллельного и последовательного алгоритмов
Рассмотрим вопрос об объеме памяти, необходимой для хранения списка всех триангуляций Т G Tr(F,P) многоугольника F относительно конечного множества Р. Прежде всего надо описать F и Р, для чего можно, например, указать число N элементов множества Р, а затем выписать набор координат Xi, yi точек этого множества, после чего привести список номеров вершин многоугольника F. Информацию же о три-ангуляциях можно записывать различными способами. Один из них таков. Для каждой триангуляции будем хранить список номеров вершин треугольников, составляющих эту триангуляцию. Тогда список всех триангуляций будет содержать ktr ■ (3 ■ N) чисел в промежутке от 1 до N (напомним, что ktr = lTr(F,P)| — число всех триангуляций многоугольника F относительно множества Р, а m — число треугольников в любой такой триангуляции).
Другой способ заключается в следующем. Пусть П — некоторая перегородка, определяемая многоугольником F, множеством Р и некоторой (заранее выбранной) прямой I. Тогда П однозначно определяет две части Fi и F2 многоугольника F (см. начало предыдущего раздела). Нам потребуется разделяющий символ, который обозначим R (за R можно принять, например, число N + 1). Фрагмент записи, кодирующий список всех триангуляций Т G Tr(F,P), до которых можно достроить перегородку П, имеет такой вид:
1) Список номеров вершин треугольников, составляющих перегородку П, а затем разделяющий символ R.
2) Число mi треугольников в любой триангуляции первой части Fi многоугольника F.
3) Список триангуляций первой части Fi многоугольника F. Для каждой триангуляции записывается список номеров вершин треугольников, составляющих эту триангуляцию.
4) Символ R.
5) Число т2 треугольников в любой триангуляции второй части F2 многоугольника F.
6) Список триангуляций второй части F2 многоугольника F (как в пункте 3).
7) Символ R.
Пусть при г = 1, 2 часть ^ многоугольника Р имеет ^ триангуляций. Пусть также перегородка П состоит из тп треугольников. Тогда имеется ■ Ь2 триангуляций Т € € Тг(Р,Р), до которых можно достроить перегородку П. При этом любая триангуляция состоит из т = т1 + тп + т2 треугольников. Поэтому для записи этих триангуляций по первому способу необходимо У1 = ■ ¿2) ■ (3т) = 31\Ь2т чисел в диапазоне от 1 до N. Второй же способ требует
^2 = (3тп + 1) + (1 + Ь ■ (3тг)) + 1 + (1 + ^ ■ (3т2)) + 1 = 3тп + 3^1 + 3^2 + 5
чисел. Разность У1 — У2 можно записать в виде
VI — ^2 = 3тп(Ь г2 — 1) + Зт^^ — 1) + З-^О^ — 1) — 5.
Если > 1 и тп > 2, то У1 — У2 > 0, поэтому второй способ записи списка триангуляций требует меньше памяти, чем первый. Если же ^ = = 1, то второй способ требует запомнить на 5 чисел больше, чем первый. Однако это бывает только тогда, когда части Р1 и Р2 многоугольника Р допускают только одну триангуляцию каждая. Подобные ситуации случаются, но достаточно редко (см. ниже примеры 2 и 3). В подавляющем большинстве случаев (когда Ь112 > 2) У2 меньше У1:
Утверждение 1. Пусть перегородка П и целое число п > 4 таковы, что каждая из частей Р1, Р2 многоугольника Р содержит по п точек множества Р, которые являются вершинами выпуклого п-угольника. Тогда Щ < ^^ + 3(2п-4§(С—^, где С^ = С2,к — число Каталана (см., например, [9]). В частности, при п = 4 верно Щ- < §, а при п = 5 выполнено < 1.
Доказательство. Так как части Р1 и Р2 многоугольника Р не имеют общих точек, получаем, что N = |Р| > 2п, поэтому число треугольников т в любой триангуляции Т € Тг(Р, Р) не меньше 2п — 4. Так как выпуклый и-угольник допускает ровно Сп-2 триангуляций (см.: [8; 9]), несложно заключить, что ^ > Сп-2 при I = 1, 2. Пусть для определенности 1 < < Ь2. Тогда У2 < 3^(тП + т1 + т2) + 5 = 312т + 5. Поэтому
У2 3Ь2т + 5 15 1 5
ТТ < * . . = " + < ^- +
У1~ 3тЫ2 и 3тЫ2- Сп-2 3(2п — 4)(Сп-2)2'
Остановимся теперь на вопросе о сравнении быстродействия последовательного и параллельного алгоритмов. Чтобы перечислить все триангуляции Т € Тг(Р,Р), до которых можно достроить перегородку П, параллельный алгоритм должен построить ^ и Ь2 триангуляций частей Р1 и Р2 многоугольника Р соответственно, а перед этим — саму перегородку П. Таким образом, надо найти 1 + ^ + Ь2 триангуляций отдельных частей многоугольника Р. Последовательный же алгоритм должен строить ^ ■ Ь2 триангуляций всего многоугольника Р. Если 11,Ь2 > 2, то первое число меньше второго, то есть параллельный алгоритм работает быстрее последовательного.
Если части Р1 и Р2, определяемые горизонтальной перегородкой П, достаточно велики, то каждую из них можно разбить на две части вертикальной перегородкой и перечислить триангуляции получившихся четырех частей многоугольника Р. Ниже (в примере 1) приведены результаты численных экспериментов.
Приведем теперь результаты, полученные с помощью описанных алгоритмов.
Пример 1. Рассмотрим на плоскости множество из п ■ т точек:
= {{%,]) : г = 1, 2,...,п, ] = 1, 2,... ,т},
где п,т > 1 — целые числа. Пусть Р — выпуклая оболочка множества Р = Рт,п. Число триангуляций в Тг(Р, Р) при некоторых п и т подсчитывалось тремя способами: с помощью последовательного алгоритма (алгоритм 1), по алгоритму с одной горизонтальной перегородкой (алгоритм 2), а также по алгоритму с одной горизонтальной и двумя вертикальными перегородками (алгоритм 3). Получены следующие результаты:
п 3 4 4 4
т 6 4 5 6
Алгоритм 1 12 6 3 963 Более 2 ■ 105
Алгоритм 2 7 3 85 3 511
Алгоритм 3 2 2 40 1 231
Число триангуляций 182132 46 456 2 822 648 182 881520
В таблице указано время работы компьютерной программы (в секундах).
Рассмотрим теперь примеры перегородок, для которых числа ¿ь Ь2 малы и потому параллельный алгоритм не дает существенного преимущества по сравнению с последовательным (примеры 2 и 3), или же, наоборот, эти числа велики и преимущество очень существенно (пример 4).
Пример 2. Пусть Р и Р — такие, как в примере 1. Выберем прямую I с уравнением у = 5/2. При I = 1, 2,... ,п — 1 проведем отрезки, соединяющие точки с координатами (г, 1) и (г + 1,га). Эти отрезки можно единственным образом дополнить другими отрезками так, чтобы получилась триангуляция многоугольника Р относительно множества Р. Соответствующая этой триангуляции перегородка изображена (при п = 4 и т = 5) на рисунке 2 слева (входящие в нее треугольники заштрихованы). Для этой перегородки = Ь = 1.
Рис. 2. Многоугольники из примера 2 (слева) и примера 3 (справа), а также перегородки, соответствующие описанным в этих примерах триангуляциям
Пример 3. Пусть снова Р и Р — такие, как в примере 1, причем т = 4, а п имеет вид п = 6к или п = 6к + 2, где к > 1 — целое. Пусть I — прямая с уравнением у = 5/2. Пусть также I — отрезок, соединяющий точки ^ и д2 с координатами (1,1) и (п, 4) соответственно. Пусть — множество отрезков с концами ^ и р, где точка р принадлежит множеству Р и лежит ниже отрезка I. Пусть также Х2 — множество отрезков с концами и р, где р € Р и точка р лежит выше отрезка I. Тогда множество
отрезков Хх и Х2 и {I} можно единственным образом дополнить другими отрезками так, чтобы получилась триангуляция многоугольника Р относительно множества Р. Пусть П — соответствующая перегородка и П — объединение треугольников из П. Если начать обход границы многоугольника П (против часовой стрелки) из вершины то встретятся вершины с координатами + 1, 2), (п, 2), (п, 3), ([^у1] , 3)), = = (п, 4), (, 3)), (1, 3), (1, 2), ([^у2] , 2)), после чего мы вернемся в вершину дх. Соответствующая этой триангуляции перегородка изображена (при п = 6) на рисунке 2 справа (входящие в нее треугольники заштрихованы). Для этой перегородки ^ = = 1.
Пример 4. Пусть Р и Р — такие, как в примере 1, причем п = 5 и т = 6. Пусть П — перегородка, заполняющая горизонтальную полосу 3 < у < 4. Тогда части ^ и Р2 многоугольника Р будут иметь по 12 170 триангуляций каждая и отношение V2 будет меньше числа 0, 0001.
Пример 5. Пусть т,п > 1 — целые числа, а Р и Р — многоугольник и множество из примера 1 для этих т и п. Пусть У\ и У2 — количество целых чисел (в границах от 1 до N +1, где N = т • п) при первом и втором способе записи списка всех триангуляций многоугольника Р относительно множества Р. В следующей таблице указаны приближенные значения У\ и У2 (а также их отношение) при некоторых т и п:
п 3 4 4 4
т 6 4 5 6
Число триангуляций 182132 46 456 2 822 648 182 881520
Число Ух 10, 93 ■ 106 2,51 ■ 106 203, 23 ■ 106 164,6 ■ 108
Число У2 0, 82 ■ 106 0, 29 ■ 106 9,18 ■ 106 2, 67 ■ 108
Отношение Й- V1 0, 075 0,115 0, 045 0, 016
Пример 6. При перечислении триангуляций можно учитывать только те из них, в которых нет треугольников с длинными сторонами или же треугольников с маленькими углами (задача фильтрации). Укажем число триангуляций многоугольника из примера 1, для которых длины всех сторон треугольников не больше заданного числа Р:
п 3 4 4 4
т 6 4 5 6
L = 2 1024 512 4 096 32 768
L = 3 84 592 28 608 1 168516 47733 448
L = 4 163 330 46 456 2 700 598 159 422 068
СПИСОК ЛИТЕРАТУРЫ
1. Клячин, В. А. Метод цепей для организации хранения многомерных триангуляций / В. А. Клячин, В. В. Попов // Вестник Волгоградского государственного университета. Серия 1, Математика. Физика. — 2013. — № 2 (19). — С. 71-79.
2. Попов, В. В. Об алгоритме перечисления триангуляций / В. В. Попов // Вестник Волгоградского государственного университета. Серия 1, Математика. Физика. — 2014. — № 5 (24). — С. 40-45.
3. Попов, В. В. Об алгоритме перечисления остовов связного графа / В. В. Попов // Вестник Волгоградского государственного университета. Серия 1, Математика. Физика. — 2015. — № 2 (27). — С. 6-16.
4. Попов, В. В. О параллельном алгоритме перечисления триангуляций множества точек плоскости / В. В. Попов // Геометрический анализ и его приложения : материалы III Международной школы-конференции. — Волгоград : Изд-во ВолГУ, 2016. — C. 168-170.
5. Препарата, Ф. Вычислительная геометрия: Введение / Ф. Препарата, М. Шеймос. — М. : Мир, 1989. — 478 с.
6. Скворцов, А. В. Триангуляция Делоне и ее применение / А. В. Скворцов. — Томск : Изд-во Том. ун-та, 2002. — 128 с.
7. On the Number of Plane Geometrical Graphs / O. Aichholzer, T. Hackl, B. Vogtenhuber, C. Huemer, F. Hurtado, H. Krasser // Graphs and Combinatorics. — 2007. — Vol. 23. — P. 67-84. — DOI: 10.1007/s00373-007-0704-5.
8. Hurtado, F. Graph of triangulations of a convex polygon and tree of triangulations / F. Hurtado, M. Noy // Computational Geometry. — 1999. — № 13. — P. 179-188.
9. Polia, G. On picture-writing / G. Polia // The American Mathematical Monthly. — 1956. — № 63. — P. 689-697.
REFERENCES
1. Klyachin V.A., Popov V.V. Metod tsepey dlya organizatsii khraneniya mnogomernykh triangulyatsiy [Chanes Method for Storage of Multidimensional Triangulation]. Vеstnik Volgogradskogo gosudars^nnogo univеrsitеta. Sеriya 1, Matеmatika. Fizika [Science Journal of Volgograd State University. Mathematics. Physics], 2013, no. 2 (19), pp. 71-79.
2. Popov V.V. Ob algoritme perechisleniya triangulyatsiy [On Algorithm of Numbering of Triangulations]. Vеstnik Volgogradskogo gosudars^nnogo univеrsitеta. Sеriya 1, Matеmatika. Fizika [Science Journal of Volgograd State University. Mathematics. Physics], 2014, no. 5 (24), pp. 40-45.
3. Popov V.V. Ob algoritme perechisleniya ostovov svyaznogo grafa [On Algorithm of Numbering the Spanning Trees in a Connected Graph]. Vеstnik Volgogradskogo gosudars^nnogo univеrsitеta. Sеriya 1, Matеmatika. Fizika [Science Journal of Volgograd State University. Mathematics. Physics], 2015, no. 2 (27), pp. 6-16.
4. Popov V.V. O parallelnom algoritme perechisleniya triangulyatsiy mnozhestva tochek ploskosti [On Parallel Algorithm of Numbering of the Triangulations of a Finite Subset of the Plane]. Gеomеtrichеskiy analiz i еgo prilozhеniya: matеrialy IIIMеzhdunarodnoy shkoly-konfеrеntsii. Volgograd, Izd-vo VolGU, 2016, pp. 168-170.
5. Preparata F., Shamos M. Vychislitеlnaya gеomеtriya: Vvеdеniе [Computational Geometry: An Introduction]. Moscow, Mir Publ., 1989. 478 p.
6. Skvortsov A.V. Triangulyatsiya Dеlonе i ее primеnеniе [Delaunay Triangulation and Its Application]. Tomsk, Izd-vo Tom. un-ta, 2002. 128 p.
7. Aichholzer O., Hackl T., Vogtenhuber B., Huemer C., Hurtado F., Krasser H. On the Number of Plane Geometrical Graphs. Graphs and Combinatorics, 2007, vol. 23, pp. 67-84. DOI: 10.1007/s00373-007-0704-5.
8. Hurtado F., Noy M. Graph of Triangulations of a Convex Polygon and Tree of Triangulations. Computational Geometry, 1999, no. 13, pp. 179-188.
9. Polia G. On Picture-Writing. The American Mathematical Monthly, 1956, no. 63, pp. 689-697.
ON THE PARALLEL ALGORITHM OF NUMBERING TRIANGULATIONS OF THE POLYGON IN THE PLANE
Vladimir Valentinovich Popov
Candidate of Physical and Mathematical Sciences, Associate Professor, Department of Computer Sciences and Experimental Mathematics, Volgograd State University
[email protected], [email protected]
Prosp. Universitetsky, 100, 400062 Volgograd, Russian Federation
Abstract. The task of constructing a triangulation of a finite subset of the plane is considered by many authors (see, for example, [5-8]). In [1] it was offered the algorithm for constructing all the triangulations of a finite set on the plane. The corresponding algorithm for three-dimensional space is described in [2]. In this paper we consider the following problem:
Let P be a (closed) polygon in the plane and P = {pi,p2,... ,Pn} is a finite subset of R2, including all the vertices of the polygon F. It is necessary to numbering all the triangulations of the polygon F relative to a set P.
In this paper we propose a parallel algorithm for solving this problem. Some of the results are announced in [4].
The triangulation T of a polygon F relative to a set P is a collection rSi, S2, ..., Sm of triangles, satisfying the following conditions:
(1) Each point pi G P is a vertex of at least one of the triangle Sj.
(2) The vertices of any triangle Sj lie in the set P.
(3) If i = j, then the triangles Si and Sj either have no common points, or have (only) a common vertex, or have (only) a common edge.
(4) The union of triangles Si, S2, ..., Sm coincides with the polygon F.
Let Tr(F,P) be the set of all triangulations, satisfying conditions (1)-(4).
Thus, it is necessary to list all the triangulation T G Tr(F,P). To describe the parallel algorithm for solving this problem we need to use the notion of septum. Let I be such a straight lines in the plane, which intersect F and disjoint with P. We call the septum defined by the triple F, P, I, a set n of triangles, which satisfies the following conditions:
(a) All vertices of any triangle S G n lie in the set P.
(b) If S,S' G n and S = S', then S n S' = 0, or S and S' have (only) a common vertex or have (only) a common edge.
(c) The union of all triangles S G n contains the set F n I and itself is contained in F.
Let T G Tr(F, P) is a triangulation of the polygon F relative to the set P and I is a straight line, l n F = 0 and I n P = 0. Then n = {S G T : 5 n I = 0} is a septum defined by the triple F, P, /. The line I divides the plane R2 into two half-planes Hi and H2. Let, for i = 1,2, Ti be the set of all triangles S G T, that lies in Hi, and let Fi be the union of triangles S G Ti. Then Ti is a triangulation of polygon Fi relative to the set P n Fi. Thus, if we are given a triangulation T G Tr(F,P), it is possible to uniquely identify the septum n and the triangulations Ti, T2. On the contrary, if we have n, Ti and T2, then the family of all triangles from n, Ti and T2 gives us triangulation T. In this way, we can list all the triangulation T G Tr(F, P): we need only to renumber all the the septa n, defined by the triple F, P, I, and for each such n to renumber the triangulations Tx G Tr(Fi,P n Fi) and T2 G Tr(F2, P n F2).
We now present some of the results obtained by the described methods.
Example 1. Consider the set Lm,n on the plane, consisting of n • m points:
Lm,n = {(i,j ) : i = 1, 2,... ,n, j = 1, 2,..., m},
where n,m > 1 — integers.
Let F be the convex hull of P = Pm,n. Then the number of triangulations in Tr(F, P) for some n and m we calculated in three ways:
1) Using algorithm from [1] for constructing all triangulations T G Tr(F, P) (Algorithm 1).
2) Using algorithm we describe above, where I is a horizontal line (Algorithm 2).
3) Using the modification of the algorithm from 2) in which we need horizontal line and vertical line (Algorithm 3).
n 3 4 4 4
m 6 4 5 6
Algorithm 1 12 6 3 963 More then 2 ■ 105
Algorithm 2 7 3 85 3 511
Algorithm 3 2 2 40 1 231
The number of triangulations 182132 46 456 2 822 648 182 881520
The table shows the operating time of the computer program (in seconds).
Example 6. The following problem arises often: for given F and P we need to numbering only those triangulation T G Tr(F,P), that satisfy certain additional conditions (Filtering problem). The following table shows (for some m, n and P G R) the number of such a triangulation T from Example 1, that for any triangle S G T the length of the sides of S does not exceed P.
n 3 4 4 4
m 6 4 5 6
L = 2 1024 512 4 096 32 768
L = 3 84 592 28 608 1 168 516 47 733 448
L = 4 163 330 46 456 2 700 598 159 422 068
Key words: triangulation, the number of triangulations, the tree of triangulations, memory volume estimate, Catalan number, convex hull.