Размер памяти для хранения упорядоченного корневого графа
И.Б. Бурдонов <[email protected]> A.C. Косачее <ко[email protected]> Институт системного программирования РАН, 109004, Россия, г. Москва, ул. А. Солженицына, д. 25
Аннотация. В статье рассматривается размер памяти, необходимый и достаточный для хранения графа из класса неориентированных корневых упорядоченных связных графов как нумерованных, так и ненумерованных. Введение содержит основные определения и постановку задачи. Граф корневой, если одна из вершин выделена и названа корнем. Граф упорядоченный, если для каждой вершины все инцидентные ей рёбра линейно упорядочены. Граф нумерованный, если все его вершины помечены различными идентификаторами, в частности, пронумерованы целыми числами от 0 до п-1, где п число вершин графа. Два неориентированных корневых упорядоченных графа G и G' считаются слабо изоморфными, если существует взаимно-однозначное соответствие вершин такое, что: 1) соответствующие вершины имеют одинаковые степени, 2) рёбра ab из графа G и а Ъ' из графа G \ инцидентные соответствующим вершинам а и а' и имеющие в этих вершинах одинаковые номера, ведут в соответствующие вершины b и Ь\ 3) корни соответствуют друг другу. Для нумерованных графов при изоморфизме дополнительно требуется совпадение номеров соответствующих вершин. Графы рассматриваются с точностью до слабого изоморфизма. Показано, что память, необходимая и достаточная для хранения любого графа из указанного класса, имеет размер @(mlogn) для нумерованных графов, ®(n+(m-n+X)logn) для ненумерованных графов с числом вершин п и числом рёбер т, и ®(n2logn) для графов без кратных рёбер и петель с числом вершин п. Также показано, что память, достаточная для хранения последовательности рёбер длины 0(п) или остова графа, имеет размер 0(nlog(nAJ) или 0(nlogA), соответственно, где А максимальная степень вершины.
Ключевые слова: неориентированный граф; упорядоченный граф; нумерованный граф; корневой граф; представление графа; перечисление графов
DOI: 10.15514/ISPRAS-2017-29(2)-l
Для цитирования: Бурдонов И.Б., Косачев A.C. Размер памяти для хранения упорядоченного корневого графа. Труды ИСП РАН, vol. 29, issue 2, 2017, pp.7-26. DOI: 10.15514/ISPRAS-2017-29(2)-l
1. Введение
В задачах исследования графов часто возникает проблема определения размера памяти, необходимой для хранения графа. Понятно, что минимальный размер такой памяти определяется числом графов интересующего нас класса и представляет собой логарифм от этого числа. Однако проблема определения числа графов того или иного класса, называемая также проблемой перечисления графов, - это, как правило, достаточно трудная проблема и редко удаётся получить результаты, выражаемые простыми формулами. На рис. 1 показаны виды графов, которые рассматриваются в данной статье. Будем обозначать: п - число вершин, т - число рёбер, Д - максимальная степень вершины.
Говорят, что граф нумерованный (или помеченный), если все его вершины помечены различными идентификаторами; мы будем считать, что они пронумерованы числами от 0 до п-\. Граф корневой, если одна из его вершин выделена, такая вершина называется корнем.
По теореме Кэли число некорневых нумерованных деревьев равно и"2 [1]. Поскольку корень может быть выбран п разными способами, число корневых нумерованных деревьев равно ппЛ. Известно число нумерованных графов без петель и кратных рёбер с заданным числом вершин п. Оно равно 2и(и1)/2 [2]. Если допускаются петли, то число графов возрастает до 2и(и1)/2+п = 2и(и+1)/2. Будем называть граф упорядоченным, если задано локальное упорядочение его рёбер: для каждой вершины а все инцидентные ей рёбра перенумерованы от 1 до Д(а), где Д(а) степень вершины а. В неориентированном упорядоченном графе каждое ребро получает два номера - по одному в каждом из своих концов; петля также получает два номера в инцидентной ей вершине. В корневом дереве рёбрам можно придать естественную ориентацию от корня: ребро ab получает ориентацию а—>Ь. если вершина а лежит на пути в дереве от корня до вершины b, т.е. b потомок а. В таком ориентированном дереве корень имеет полу степень захода 0, а некорневая вершина имеет полу степень захода 1. Когда мы ниже будем говорить об ориентированных рёбрах в корневом дереве, мы будем иметь в виду именно эту ориентацию.
Граф
JJ-(3J
Нумерованный граф
Корневой граф
Нумерованный корневой граф
Упорядоченный Упорядоченный Упорядоченный Упорядоченный
граф
нумерованный граф
Упорядоченное Нумерованное корневое дерево дерево
корневой граф
нумерованный корневой граф
Корневое дерево
Нумерованное корневое дерево
нумерация вершин обходом дерева в ширину
Упорядоченное нумерованное корневое дерево
21
упорядочение рёбер по возрастанию номеров вершин
(0Й2)
2
©П® 2-упорядоченное 2-упорядоченное дерево нумерованное
дерево
О
Естественная ориентация корневого дерева
21
Упорядоченное нумерованное корневое дерево
П Г 2-упорядоченное корневое дерево
П Г 2-упорядоченное
нумерованное
корневое дерево
Рис. 1. Виды графов Fig. 2. Kinds of graphs
Корневое дерево называется упорядоченным, если для каждой вершины а её потомки, т.е. концы рёбер, выходящих из а при естественной ориентации рёбер.
линейно упорядочены, т.е. пронумерованы от 1 до Д(а)-1. Заметим, что упорядоченное корневое дерево не является упорядоченным графом, если п > 1, поскольку в нем ребро а—имеет номер только в вершине а, но не в вершине Ь. Однако если в вершине b ему присвоить любой номер i от 1 до Л(/>). а также увеличить на 1 каждый номер j > i ребра, выходящего из Ь. то такое упорядоченное дерево станет упорядоченным графом. Мы будем называть его 2-упорядоченным деревом. Понятно, что одному упорядоченному дереву соответствует, вообще говоря, множество 2-упорядоченных деревьев при разных выборах i=\.A(b).
Число упорядоченных корневых деревьев с п вершинами - это число Каталана (последовательность А000108 в OEIS [3], называемая также Segner numbers) с„. 1 = С2„-2пЛ1п = (2л-2)!/((л-1)М) [4][5].
Нумерованное корневое дерево задаёт естественное упорядочение рёбер, выходящих из вершины при естественной ориентации рёбер корневого дерева, по возрастанию номеров концов рёбер. Упорядоченное корневое дерево, наоборот, задает естественную нумерацию вершин обходом дерева в ширину. Но при этом получается не любое нумерованное корневое дерево: номер 0 всегда получает корень, номер 1 - вершина, которая отлична от корня и соединена с корнем ребром с минимальным номером в корне, и т.д. В общем, как видно из сравнения чисел ппЛ и С„.\, нумерованных деревьев больше, чем упорядоченных.
Будем говорить, что два неориентированных упорядоченных графа G и G' сильно изоморфны, если существует взаимно-однозначное соответствие вершин такое, что: 1) соответствующие вершины имеют одинаковые степени, 2) рёбра ab из графа G и а Ъ' из графа ( I . инцидентные соответствующим вершинам аиа'и имеющие в этих вершинах одинаковые номера /-/ . ведут в соответствующие вершины b и b" и имеют в них одинаковые номера /=/". При слабом изоморфизме не требуется совпадение вторых номеров рёбер, т.е. допускается Для корневых упорядоченных графов при изоморфизме будем дополнительно требовать, чтобы корни соответствовали друг другу. Для нумерованных упорядоченных графов при изоморфизме будем дополнительно требовать, чтобы номера соответствующих вершин совпадали. При отсутствии кратных рёбер, в частности, для деревьев, оба изоморфизма совпадают. Действительно, в вершине h' должно быть ребро с номером j, поскольку ребро с таким номером есть в вершине b, b соответствует h' и, следовательно, степени вершин совпадают. Если бы было то ребро с номером j должно было бы вести из b" в вершину с Vaпоскольку из b" в а" уже ведет ребро с другим номером j \ а кратных рёбер нет. Следовательно, вершины b и b" соответствуют друг другу, но ребро с номером j ведет и! h в а и и! h в с Va ', что противоречит изоморфизму. При наличии кратных рёбер сильный и слабый изоморфизм различаются, пример приведён на рис. 2.
G G'
Рис. 2. Граф G слабо (но не сильно!) изоморфен графу G' Fig. 2. The graph G is weakly (but not strongly!) isomorphic to the graph G'
Если G некоторый класс неориентированных упорядоченных графов, то через N(G) обозначим число графов в нём с точностью до слабого изоморфизма. В данной статье рассматриваются классы G\(njn) нумерованных и (¡2(11.111) ненумерованных неориентированных упорядоченных корневых связных графов с и вершинами и т рёбрами (петли и кратные рёбра допускаются), а также классы G\(n) нумерованных и (12(11) ненумерованных графов с п вершинами без кратных рёбер и петель. Мы дадим точную по порядку оценку размера памяти, необходимой и достаточной для хранения любого графа из этих классов с точностью до слабого изоморфизма: N(G\(njn)) = ®(mlogn), N(G2(njn)) = ®(n+(m-n+l)Iogn), N(Gi(n)) = N(G2(n)) = ®(n2Iogn).
2. Нумерованные графы
В этом разделе мы рассмотрим графы из класса G\(njn)\ нумерованные неориентированные упорядоченные корневые связные графы с п вершинами и т рёбрами. Мы дадим оценку сверху 0(mlogn) для размера l\(njn) памяти, достаточной для хранения графа из этого класса, и оценку снизу для числа N\(n,m) = X(G\(n.m)) графов этого класса с точностью до слабого изоморфизма, равную Q(;?"'), что даст оценку снизу Q(mlogn) для размера L\(njn) памяти, необходимой для хранения графа из этого класса. Поскольку эти оценки размера памяти совпадают, размер памяти, необходимой и достаточной для хранения графов из класса G\(rijti), равен ©(mlogn).
Если граф нумерованный, мы для краткости будем говорить «вершина а» вместо «вершина с номером а». Через Ао(а) будем обозначать степень вершины а в графе G. Для нумерованного упорядоченного корневого графа G будем обозначать: root(G) - номер корня графа G: (aj) - ребро, инцидентное вершине а и имеющее в ней номер /; 5a(aj) - другой конец ребра (aj): vo(aJ) - номер ребра (aj) в вершине 5o(aj). По определению <\;(<\;(я./).\7;(«./)) = а и Yv;(cv;(fl./).\v;(fl./)) = /'. Если граф G подразумевается, то его указание в нижнем индексе будем опускать.
2.1. Представление графа в памяти
В этом подразделе мы опишем способ представления графа из класса G\(njn) в памяти размером h(njn) = 0(mlogn). Таких представлений может быть несколько, мы дадим одно из них (рис. 3).
Мы будем применять два представления целых неотрицательных чисел. Обозначим r(x) = 1, если х = 0. и r(x) = |_//>xj+l. если х > 0. где LzJ обозначает ближайшее кг снизу целое число, a Ibx=Iog2x- двоичный логарифм. Если число х - это любое число из интервала [0,/>], где р известно, то будем использовать двоичный код фиксированной длины г{р). Такое представление для х = E{x,-2r(i"~' | i=\..r(p)}, где x,e{0,l}, обозначим Dp(x) = х\,х2,...хпр). Оно занимает г(р) бит памяти. Если число х любое, не ограниченное сверху известной величиной, то минимально возможная разрядность его двоичного кода равна г(х). В этом случае в представлении числа х каждый его разряд будем предварять кодом 0, а в конце поместим код 1. Такое представление для х = Е{х,-2гЫ"' | ;'=1..г(х)}, где х,е{0,1}, обозначим D(x) = 0,xi,0,x2,... 0,x)trl,l. Оно занимает 2г(х)+1 бит памяти.
0 3 0 2 3 1
0101 1 010 001 010 10 011 000 11 000 011 000 10 010 011 001 011 10
а
1 2 3 1 2 1 2 3 1 номера рёбер в вершинах
Рис. 3. Описание нумерованного графа Fig. 3. Description of the numbered graph
Представление графа - это битовая последовательность: D(n-1), Веришна(0), Веришна( 1),... Веришна(п-1).
Здесь Веришна(а), где а=()..п-1. является описанием вершины а. Оно
представляет собой битовую последовательность
Ребро(а, 1), Ребро{а2), ... Ребро(аЛ(а)), Ограничитель вершины.
Здесь Pe6po(aj) - описание конца ребра (aj\ представляющее собой битовую
последовательность О.Дн (6(я./)). Это описание занимает 1+г(;?-1) бит.
Ограничитель вершины - это двухбитовый код 10, если вершина с номером а -
это не корень, и 11 для корня.
Заметим, что каждое ребро (aj) (включая петли) описывается дважды: в вершине я, где указывается вершина 5(aj), и в вершине 5(aj), где указывается вершина а: петля (5(a,i) = а) также дважды описывается, поскольку она тоже имеет два номера i и v(a,i), но оба в вершине а. Тем самым, число описаний
Pe6po(a,i) равно 2т.
При таком описании графа для любого ребра (a,i) мы можем по описанию Вершина(а) узнать вершину 5(a,i), в которую ведет это ребро. Однако, по описанию Вершина(Ъ(а,1)) мы не можем узнать, какой номер v(a.i) это ребро имеет в вершине 5(a,i), но только подмножество номеров рёбер, одним из которых является номер v(a,i). Это подмножество номеров / таких, что в описании BepiuuHa(5(a,i)) указана вершина а как другой конец ребра j: 5(5(a,i)j) = а. Таким образом, описание определяет граф с точностью до слабого изоморфизма.
Заметим, что таким способом можно описать любой нумерованный упорядоченный корневой граф, а не только связный. Если граф не корневой, то Ограничитель вершины может быть однобитовым кодом 1, что уменьшает описание на п бит.
При п > 2 описание графа занимает память размером
h(n,m) = 2r(w-l)+l + 2да(1+г(и-1)) + 2 n = 2г(п-\) + 2даг(и-1) + 2т + 2n + 1.
При п =1, имеем/i(l,да) = 2-1 +2да-1 +2да + 2-1 + 1 = 4да + 5.
При п > 2 имеем h(n,m) = 2(L»(w-l)J+l) + 2да(|_»(и-1)>1) + 2да + 2n + 1 =
= 2llb(n-l)\ + 2m\_lb(n-l)\ + 4да + 2п + 3.
В частности, /i(2,m) = 2-0 + 2да- 0 + 4да + 2-2 + 3 = 4да + 7 > А(1,да).
Поскольку lb(n-1) < Ihn и LxJ < х, имеем l\(n,m) < 2Ibn + 2mlbn + 4да + 2n + 3.
Поскольку в связном графе п < да+1, имеем
h(n,m) < 2Ibn + 2mlbn + 4да + 2(да+1) +3 = 2Ibn + 2mlbn + 6да + 5.
Для да > 1 имеем h(n,m) < 2mlbn + 2mlbn + 6да + 5да = 4-mlbn + 11да.
Для w > 2 имеем 1 < и поэтому l\(n,m) < 4-mlbn + 1 Imlbn = \5mlbn.
Итак, для да > 1 и w > 2 имеем 1\(п,т) < \5mlbn, т.е. l\(n,m) = 0(mlogn).
2.2. Хранение графов с меньшим числом вершин и/или рёбер
Функция 1\(п,т) монотонно неубывающая по каждой переменной п и да: l\(\,m) < l\(\,m+\), l\(\,m) < 1\(2,т) и, если п > 2, то l\(n,m) < k(n,m+\) и h(n,m) < 1\(п+\,т). Поэтому память размером 1\(п,т) достаточна для хранения любого нумерованного упорядоченного корневого графа с числом вершин w' < w и числом рёбер да' < да.
2.3. Число графов
В этом подразделе мы оценим снизу число N\(n,m) графов в классе G\(n,m) с точностью до слабого изоморфизма и, соответственно, размер L\(n,m) памяти, необходимой для хранения таких графов. Мы построим класс графов G\2(n,m) с G\(n,m) и подсчитаем число графов в нем (рис. 4).
^2) естественная (of'i ориентация
рёбер и их 1 ^ (¿) упорядочение
Нумерованное Правильное
корневое дерево дерево из Ч] (4)
2 нумерации 3-2{3) рёбер
IT 5 1
Граф из Gi1(4,7-4+1)
Граф из Gr(4,7)
Рис. 4. Построение класса графов Gf(n,m) для п=4 и т = 7 Fig. 4. The construction of the graph class Gr(n,m) forn=4 and m=7
Правильным деревом будем называть 2-упорядоченное нумерованное корневое дерево, в котором при естественной ориентации рёбер ребро Ь—>а. входящее в вершину я, имеет в вершине а номер Д(я). а последовательности рёбер, выходящих из вершины я, в порядке их нумерации в вершине я от 1 до Д(я)-1 соответствует возрастающая последовательность номеров конечных вершин этих рёбер: \/я=0..;?-1 \/;',у=1..Д(я)-1 (/<_/=> 8(У) < 8(/)).
Правильное дерево однозначно получается из заданного нумерованного корневого дерева преобразованием которое нумерует рёбра в вершинах в соответствии с номерами конечных вершин рёбер при естественной ориентации рёбер. А именно: для каждой некорневой вершины я все рёбра, выходящие из я, т.е. рёбра вида а—>Ь. нумеруются от 1 до Д(я)-1 по порядку возрастания номеров концов с этих рёбер, а входящее ребро с—ы получает в вершине я номер Д(я); в корне е нет входящего ребра, а все выходящие рёбра перенумерованы от 1 до Л(е) также по порядку возрастания номеров концов этих рёбер.
Очевидно, что операция удаления из правильного дерева нумерации рёбер в вершинах определена для любого правильного дерева и обратна к преобразованию/ь Поэтому отображение/ биективно. Следовательно, число правильных деревьев с п вершинами равно числу нумерованных корневых деревьев с п вершинами. Множество правильных деревьев с п вершинами обозначим Т\(п). Тогда по теореме Кэли Т\(п) = и"1.
Рассмотрим следующую операцию добавления к правильному дереву ТеТ\(п)
графа GeGi(n,m-n+l). Сначала изменим в G нумерацию рёбер: для каждого
ребра (a,i) его номер /' увеличим на Ат{а). После этого добавим рёбра графа G к
остову Т, используя взаимно-однозначное соответствие вершин Т и G по
номерам вершин. В качестве корня выберем корень дерева Т. Результат этой
операции обозначим через T+G. Формально:
root(T+G) = rootij), Va=0..w-1 Дт+о(а) = Ат{а) + До(а),
\fi=\.Ai{a) Ьт+о(а,1) = 8i{a,i) & vr+aia,i) = vj{a,i),
У1=Ат(а)+1..Ат+о(а) 8т+oiaj) = do(a,i-Aj{a)) & Vt+gÍoJ) = Voia,i-Aj(a)).
Если T изоморфно T\ a G слабо изоморфно G\ то
rootiJ+G) = root(T) = rootij') = root(Ty+G),
Va=0..w-1 Aj{a) = Ar(a) & Ao(a) = Ao{a) &
\fi=\..Ai{a) dj{a,i) = dr(a,i) & \//-1..До(а) 8о(я,0 = 8o (a,i).
Отсюда непосредственно следует, что T+G слабо изоморфно T'+G
Если G не слабо изоморфно G \ то
3a=0..w-l До(а) Ф Де-(я) v Ао(а) = Ао (а) & Э/-1..До(а) 8о(я,0 ^ 8o (a,i). Поэтому, если Т изоморфно Т\ a G не слабо изоморфно G\ то T+G не слабо изоморфно Ts+G\
Если Гне изоморфно Т. то 1) root(T) Ф mot(T') v 3a=0..n-\ 2) Ат{а) Ф Aria) v 3) A-Aa) = Aria) & 3i=\..Ai{a) §i{a,i) Ф br{a,i). Если выполнено условие 1, то rootiJ+G) Ф rootiT G). т.е. графы T+G и T'+G' не слабо изоморфны. Если для некоторого а=0..п-1 выполнено условие 3, то &T+aia,i) = 5r(a,i) Ф dria,i) = dr+aiaj), т.е. графы T+G и T'+G' не слабо изоморфны. Пусть для любого а=0..и-1 условие 3 не выполнено, но для некоторого а=0..п-1 выполнено условие 2: Д/{д) ф Aria). Поскольку сумма степеней вершин дерева равна удвоенному числу его рёбер, т.е. 2(и-1), то хотя бы одна из таких вершин а не является корнем. Тогда, поскольку условие 3 не выполнено, в деревьях ТиТ* существует общий путь ненулевой длины от корня до некоторой вершины а, в котором степени всех вершин, кроме а, совпадают в Г и Г, а в а не совпадают. Пусть для определенности Ду{д) < Aria). Рассмотрим ребро (д.Лу(д)) в 7 и в Ts+G\ Поскольку дерево 7 правильное, это ребро Ъ^а входящее в вершину а, т.е. <>/{«.Д'/{д)) = Ь. Поскольку Д/{д) < Aria), в 'Г тоже есть ребро (д.Лу(д)). но там оно не может заканчиваться в Ь, поскольку дерево 'Г тоже правильное ив b должно заканчиваться ребро (д.Ду (а)). Поскольку Дт(а) < Ат(а) < Aria), имеем 5т+^а,Ат(а)) = дт(а,Ат(а)) Ф dria,Aj{a)) = Ъг+о\а,Ат{а)), т.е. графы T+G и T'+G' не слабо изоморфны. Итак, мы доказали, что T+G и T'+G' слабо изоморфны тогда и только тогда, когда Тизоморфно Т'. a G слабо изоморфно G\
Теперь рассмотрим класс G\lin,m-n+\) графов, в которых все рёбра инцидентны корню, имеющему номер 0. Каждое из m-n+l рёбер, инцидентных корню,
можно провести независимым образом в любую из п вершин. Следовательно, N{G\l(n,m-n+\)) = nm'n+1. Для ребра, ведущего из корня а в вершину Ьфа, указывается только его номер в я и вершина Ь. После определения всех таких кратных рёбер ab они должны быть упорядочены в вершине Ь. но способ упорядочивания мы не фиксируем. Для петли с номером / в корне её другой номер v(a,i) - это один из номеров / ф /', выделенных в корне для петель, но какой именно номер, не указывается. Поэтому таким способом мы определяем нумерованные упорядоченные корневые графы с точностью до слабого изоморфизма.
Обозначим: G^n^m) = Tl(n)+Gl\n,m-n+1) = {ТЩТеТ^п) & GeGl\n,m-n+1)}. В силу доказанного, число графов в классе G\2(n,m) с точностью до слабого изоморфизма равно произведению числа деревьев в классе Т\(п) с точностью до изоморфизма и числа графов в классе (¡\'(".'"-"+1) с точностью до слабого изоморфизма: Ni(n,m) > N(Gi2(n,m)) = N(Ti(n))N(Gil(n,m-n+\)) = nnAnm= nm. Тем самым, для хранения графов из класса G\(n,m) требуется память L\(n,m) = L/6(M(«,ff*)-l)J+l > Vlb(nm-l)\+\. Поскольку Lx] > х-1, и nm-1 > птЛ при II > 2 и т> 1, имеемЬ\(п,т) > lb(nm-1)-1+1 > lbnm~l = (m-\)lbn, т.е. L\(n,m) = Cí(mlogri).
3. Ненумерованные графы
В этом разделе мы рассмотрим графы из класса G2(n,m): ненумерованные неориентированные упорядоченные корневые связные графы с п вершинами и т рёбрами. Поскольку графы связные, п < т+1 и т-п+1 > 0. Мы дадим оценку сверху 0(n+(m-n+\)logn) для размера h(n/n) памяти, достаточной для хранения графа из этого класса, и оценку снизу для числа N2(n,m) = N(G2(n,m)) графов этого класса с точностью до слабого изоморфизма, равную С1(2"пт~" 1). что даст оценку снизу Cl(n+(m-n+l)logn) для размера L2(n,m) памяти, необходимой для хранения графа из этого класса. Поскольку эти оценки совпадают, размер памяти, необходимой и достаточной для хранения графов из класса G2(n,m), равен ®(n+(m-n+\)logn).
3.1. Представление графа в памяти
В этом подразделе мы опишем способ представления графа из класса G2(n,m) в памяти размером l2(n,m) = 0(n+(m-n+l)logn). Таких представлений может быть несколько, мы дадим одно из них (рис. 5). Это представление похоже на представление графа из подраздела 2.1 для нумерованных графов. Для этого используется естественная нумерация вершин ненумерованного упорядоченного корневого графа, основанная на обходе графа в ширину. Опишем эту процедуру нумерации вершин.
Корень получает номер 0. Выбирается первое ребро, инцидентное корню и не являющееся петлей; его конец получает номер 1. Далее выбирается следующее ребро, инцидентное корню и не ведущее в вершины 0 и 1; его конец получает
номер 2. И так далее. Когда исчерпаются все рёбра, инцидентные корню, аналогичная процедура выполняется для вершины 1.
В общем, на каждом шаге у нас определены номера вершин 0.....а' и перебраны
все рёбра, инцидентные вершинам 0,...,а-1, где а < а'. а для вершины а перебраны рёбра с номерами 1,...,У-1. Если / < А(я). то для вершины а рассматривается ребро с номером У. Если оно ведет в одну из вершин, уже
получивших номера, т.е. в вершины 0.....а'. то переходим к следующему ребру
У+1. В противном случае конец ребра с номером У получает номер ¡7+1. Когда все рёбра, инцидентные вершине с номером ¡7, будут перебраны, т.е. когда У > А (¡7), переходим к следующей нумерованной вершине ¡7+1, если а < а\ Если же ¡7 = ¡7то процедура нумерации вершин закончена.
^—Упорядоченный ненумерованный корневой связный граф с и = 4 вершинами и т = 6 рёбрами
номера вершин в концах рёбер |_
описание описание описание описание
вершины 0 вершины вершины 2 вершины
1 <- 1 3<-3 2 <— 2
100 100 110 100 001 101001 110 011 101011 110 010 101010 111
G
1 2 1 2 3 4 1 2 3 1
номера рёбер в вершинах
Рис. 5. Описание ненумерованного упорядоченного графа (показана естественная
нумерация вершин)
Fig. 5. Description of the unnumbered ordered graph (natural numbering of vertices is
shown)
В получившемся нумерованном графе однозначно выделяется корневой остов: ребро (ал) принадлежит остову тогда и только тогда, когда вершина 5(¡7,;) получает свой номер при просмотре именно этого ребра в процедуре нумерации. Формально это означает, что из вершин, номера которых меньше ¡7, ни одно ребро не ведет в вершину 5(¡7,;), т.е. с < а => V/-l..A(c) 5(cj) Ф 5(aj), и рёбра, инцидентные вершине а и имеющие в ней номера меньшие У, также не ведут в вершину 5(¡7,;), т.е. У/-1..У-1 5(aj) Ф 5(¡7,;). Заметим, что таким образом выделяется корневой остов только при естественной нумерации вершин, описанной выше.
Теперь мы уже можем использовать представление графа, описанного в подразделе 2.1. Отличие будет в том, что для рёбер выделенного остова мы не будем указывать номера вершин. Пусть (aj) ребро остова. Тогда описание Pe6po(aj) будет не последовательностью 0./J„-i(f>(«.')). а трёхбитовым кодом 100, а описание Pe6po(5(aj),v(aj)) будет не последовательностью О.Дн (а), а
кодом 101. Тем самым, описание ребра остова будет занимать 3 бита, число таких описаний равно 2(п-1). Описание не остовного ребра, по-прежнему, занимает 1+г(и-1) бит; число таких описаний равно 2(т-п+1). Ограничителем вершин будет код 110, занимающий также 3 бита. Специальная разновидность ограничителя для корневой вершины не требуется, поскольку корень имеет фиксированный номер 0. Зато мы можем использовать трёхбитовый код 111 вместо кода 110 для ограничителя последней вершины в списке вершин и, тем самым, не указывать число вершин. В итоге описание графа занимает память размером 12(п,т) = 2(и-1)-3 + 2(т-п+\)(\+г(п-\)) + Ъп = 2(т-п+\)(\+г(п-\)) + 9п-6. При п =1, имеем /2(1,да) = 2(да-1+1)-(1+1) + 9-1 - 6 = 4да + 6. При п > 2 имеем /2(и,да) = 2(да-и+1)(1+|_#>(и- 1)J+1) + 9п - 6 = = 2(m-n+l)ilb(n-l)\+2) + 9п-6.
В частности, /2(2,да) = 2(да-2+1)(0+2) + 9-2 - 6 = 4т + 8 > /2(1,да). Поскольку lb(n-1) < Ihn и LxJ < х, имеем /2(и,да) < 2(т-п+\)(1Ъп+2) + 9п-6.
Для п > 2 имеем 1 < Ihn и, поскольку также -6 < 0, получаем
l2(n,m) < 2(m-n+l)(lbn+2lbn) + 9п = 6(m-n+l)lbn + 9п.
Поскольку в связном графе т-п+1 > 0, имеем l2(n,m) < 9((m-n+l)lbn + ri).
Итак, для п > 2 имеем l2(n,m) < 9((m-n+\)lbn + п).
Следовательно, l2(n,m) = 0(n+(m-n+l)logn).
3.2. Хранение графов с меньшим числом вершин и/или рёбер
Для связного графа, когда т-п+1 > 0, функция 12(п,т) монотонно неубывающая по т: 12(п,т) < 12(п,т+\). Также 12(1,т) < 12{2,т), но, в отличие от функции h(n,m), функция 12(п,т) не является монотонно неубывающей по п при п> 2. Например,
/2(9,9) = 2(9-9+l)(|_/Ä(9-l)J+2) + 9-9 - 6 = 2-1-(3+2) + 75 = 85, но /2(10,9) = 2(9-10+l)(U>(10-l)J+2) + 9-10 - 6 = 84.
Поэтому для того чтобы размер памяти был достаточен для хранения графов с меньшим или равным числом вершин и/или рёбер, т.е. графов из объединения ~u{G2(n\my) \ 2 <и' <п & 0 <т' <т & w'< т'+1} при п < т+1, нужно найти такое число вершин пл, на котором функция 12(п \т) достигает максимума при заданном да и в интервале 2 < п" < п. Искомый размер памяти равен 12(п \т). Как найти иЛ? Обозначим х = lh(n'-1). Тогда п' = 2х +1. Если п' целое число в интервале 2 <п < п. то х вещественное число в интервале 0 < х < lh(n-1). Подставляя 2х+1 вместо п\ имеем 12{п\т) = 2(да- 2x)(|_xJ+2) + 9(2х+1) - 6. Обозначим /2 (х,да) = 2(да-2х)(х+2) + 9(2х+1) - 6. Обозначим через хЛ значение х, при котором функция 12 (х.т) на интервале 0 < х < 1Ъ(п-1) принимает максимум. Программа Мар1е2015 и программа решения уравнений на сайте «Решение 18
математики онлайн» [7] дают одно решение:
хл = (!!'((///+1 )е2| 2/8) -1 +2.5/я2)//я2. где W функция Ламберта. Значение 2х +1 не обязательное целое, но щ = тах{\_2хЛ +lj, 2} < 2хЛ +1 < min{\~2хЛ +ll, n} = п2. Тогда искомое значение пл есть щ или щ в зависимости от того, на каком из этих двух значений щ или щ функция 12(п\т) принимает максимум: если l2(n\,m) > 12(п2,т), то пл = щ, иначе пл = п2.
3.3. Число графов
В этом подразделе мы оценим снизу число N2(n,m) графов в классе G2(n,m) с точностью до слабого изоморфизма и, соответственно, размер L2(n,m) памяти, необходимой для хранения таких графов.
Упорядоченность графа, заданного с точностью до слабого изоморфизма, однозначно определяет естественную нумерацию вершин, основанную на обходе графа в ширину. Поэтому любая нумерация, задающая нумерованный упорядоченный граф из G\(n,m), есть, фактически, перенумерация графа из G2(n,m). Тем самым, N\(n,m) = N2(n,m)-n\, где п\ - число различных нумераций вершин при фиксированном линейном порядке вершин. Поскольку N\(n,m) > пт, имеем N2(n,m) > nmln\ > nme"l(n+При п>35 имеем (п+1)и+1 < пп+2 и поэтому N2(n,m) > птеп1пм = Пт-п-2еп. Отсюда Ь2(п,т) = \_lb(N2(n,m)- 1)J+1 = llb(nm-"-2en-\)]+\ > llb(nm-"-2e"-l)]+l > lb(nm-"-2e"A)-1+1 = {m-n-2)lbn+{n-\)lbe = (m-n+\)lbn-Vbn+(n-\)lbe > (m-n+\)lbn+nl2 > (\l2)((m-n+\)lbn+n). Поэтому L2(n,m) = Q(n+(m-n+l)lbn).
Мы также докажем это утверждение конструктивно, построив класс графов G22(n,m) с G2(n,m) и подсчитав число графов в нем (рис. 6). Как сказано во введении, число упорядоченных корневых деревьев с п вершинами - это число Каталана: С„.\ = С2„.2л1п = (2w-2)!/((w-l)!w!). В [6] доказана оценка снизу: С„.\ > 22" 3(4w-5)1/2/((w-l)w7i1/2). Обозначим: А(п) = 2и"3(4и-5)1/2, B(n) = (n-l)n%m. Тогда СпЛ > 2"А(п)/В(п). Функция А(п) при п > 2 увеличивается больше чем вдвое при увеличении аргумента на 1: А(п+1) > 2А(п). Действительно, A(n+1) = 2" иЧ4(я+1)-5)12 = 2-2""3(4(w+l)-5)1/2 > 2-2""3(4w-5)1/2 = 2A(n).
Функция В(п) при it > 3 увеличивается не более чем вдвое при увеличении аргумента на 1: B(n+1) < 2В(п). Действительно, п > 3 влечет 2n-2 > n+1. что при п>0 влечет 2n(n-\) > n(n+1), что влечет 2B(n) = 2n(n-l)n1/2 > n(n+1)тг1/2 = B(n+1). Тем самым, при п > 3 имеем A(n+l)IB(n+1) > 2А(п)12В(п), т.е. функция А (п)/В(п) монотонно увеличивается.
При п=1 имеем А(1)/В(1) = 27-3(4-7-5)1/2/(7-1)-7тг1/2 = 8-231/2/21тг1/2 > 1. Следовательно, при п>1 имеем С„. \ > 2". I (n)Hi(n) > 2".
Упорядоченное дерево однозначным образом превращается в правильное дерево (см. подраздел 2.3) следующим преобразованием f2. Сначала, используя
естественную ориентацию корневого дерева, каждому ребру, входящему в вершину а, присвоим в этой вершине номер Д(а). Напомним, что при естественной ориентации корневого дерева в каждую вершину, кроме корня, входит ровно одно ребро. Мы получим 2-упорядоченное дерево, в котором ребро имеет два номера - по одному в каждом из его концов. Затем выполним естественную нумерацию вершин, основанную на обходе дерева в ширину, которую мы применяли в предыдущем подразделе 3.1. После такой нумерации дерево становится правильным. Множество полученных таким образом правильных деревьев обозначим через Т2(п).
естественная нумерация
рёбер и вершин
Упорядоченное дерево
Ф |1
©
изменение
Правильное
дерево из 22(4) ® ©
|4
нумерации рёбер
17 5
1
Граф из Gi1(4,7-4+1)
27 6
Граф из G22( 4,7)
Рис. б. Построение класса графов G22(n,m) для п=4 и т = 7 Fig. 6. The construction of the graph class От(п,т) forn=4 and m=7
Очевидно, что если для упорядоченного корневого дерева Т из правильного дерева f2(T) удалить нумерацию вершин и добавленные номера рёбер А(я). то получится исходное дерево Т. Это означает, что преобразование fi является инъекцией. Поэтому N(T2(n)) = С„.ь
Заметим, что/; не сюръективно, например, в дереве fi(T) корень всегда имеет номер 0, что не обязательно в произвольном правильном дереве. Иными словами, дерево из Т2(п) - это не любое правильное дерево из Т\ (л). Дерево из Т\(п) биективно строится из нумерованного корневого дерева, а дерево из Т2(п) биективно строится из упорядоченного дерева; нумерованных корневых деревьев больше, чем упорядоченных деревьев. Поэтому Т2(п)аТ\(п). Теперь рассмотрим операцию «+» добавления к дереву ТеТ2{п) графа Ge G\(njn-n+\), которую в подразделе 2.3 мы применяли для добавления графа G к правильному дереву из класса Т\(п). Поскольку выше мы доказали, что T+G
и T+G' слабо изоморфны тогда и только тогда, когда Т изоморфно 7 '. а G слабо изоморфно G \ в графе T+G есть только один правильный остов Т. Для дерева Т<еТ2(п) его нумерация и, следовательно, нумерация графа T+G, однозначно определяется исходным упорядоченным корневым деревом с помощью преобразования f2. Если удалить нумерацию вершин и добавленные номера рёбер А (а), то из множества графов T2(n))+G\l(n,m-n+1) получится равномощное множество графов, которое обозначим G22(n,m). Очевидно, G22(n,m) с G\2(n,m). Аналогично тому, как в подразделе 2.3 N\(n,m) > N(G\2(n,m)) = NiTxinWiG^in^m-n+l)), имеем N2(n,m) > N(G22(n,m)) = NlT2(n))N(Gi\n,m-n+\)) = CnAnm~M > 2nnm~n+\
Отсюда следует, что для хранения графов из класса G2(n,m) требуется память
L2(n,m) = \_lb(N2(n,m)-l)\+l > \_lb(2nnm"^l-l)\+l. Поскольку 2ппт'п+1-1 > 2n-lnm'n+l при n> 1 и т-п+1>0, а |_х]>х-1, имеем L2(n,m) > \_1Ъ2пЛпт-п+1 J+1 > (n-\)+(m-n+\)lbn-\+\ = (n-\)+(m-n+\)lbn, т.е. L2(n,m) = Cl(n+(m-n+l)logn).
4. Графы без кратных рёбер и петель
В графах без кратных рёбер и петель число рёбер ограничено сверху: т < п(п-1)/2. Для класса всех таких графов с п вершинами полученные выше оценки для графов с п вершинами и т рёбрами корректируются. Обозначим: G\(ri) - класс нумерованных и G2(n) - класс ненумерованных неориентированных упорядоченных корневых связных графов с п вершинами без кратных рёбер и петель, иЛ = и(и-1)/2, N\(n) = N\(G\(n)), N2(n) = N2(G2(n)), U (и) = L»(M(«))-lJ+l, L2(n) = \_lb(N2(n))-l\+l.
Функция l\(n,m) монотонно неубывающая по переменной п. поэтому память размером l\(n) = 1\(п,пЛ) достаточна для хранения описания любого графа из Gi(и). Хотя функция 12(п,т), вообще говоря, не является монотонно неубывающей по п, нетрудно убедиться, что при т = пл она монотонно неубывающая при п > 2. Поэтому при п> 2 память размером 12(п) = 12(п,пл) достаточна для хранения описания любого графа из G2(n). Для п > 3 имеем 12(п) = 12(п,пл) = (nA-n+\)lbn+n < пЧЬп = h(n,nA) = h(n). Также h(n)= 0(n2logn). Также N\(ri) > N2(n) и, следовательно, L\(ri) > L2(n). Покажем, что Ь2(п) = Cl(n2logn). Для этого рассмотрим класс G2(n) с G2(n) полных графов (степени всех вершин одинаковы и равны п-1), в каждом из которых есть простой цикл рёбер длины п с нумерацией рёбер по циклу (1,2),(1,2),...(1,2). Для такого графа можно определить естественную нумерацию вершин: вершина, достижимая из корня по последовательности к рёбер с номерами 1, получает номер к. Это значит, что Va=0..w-2 8(а,1) = a+1. 8(и-1,1) = 0, Va=l..w-1 8(а,2) = а-1, 8(0,2) = п-1.
При отсутствии кратных рёбер слабый изоморфизм графов совпадает с сильным изоморфизмом. Граф из G2(n) однозначно определяется отображением в каяедой вершине а номера ребра / > 2 в номер конца ребра, т.е.
функцией 6(а.1). Поскольку кратных рёбер нет, эта функция инъективна по номеру ребра /: \/а=0..и-1 \И^=\..п-\ /=> 5 (а,г) ф 5 (а/). В каждой вершине имеем (п-3)! различных упорядочиваний рёбер с номерами больше 2, а всего получаем Ы2(п)= N2(02(11)) >N(02 (п)) = ((п-Ъ)\)" графов. Тем самым, Ь2(п) = 11Ь(№(п))-1]+1 > 1Ь(Ы2(п))-1 = 1Ъ(((п-Ъ)\у)-1 = п1Ъ((п-Ъ)\)-1 > и/й((271)05(и-3)п~3+05/е"~3)-1 >п21Ъп при п > 5. Отсюда 12(«) = П(п^п). Итак, память, необходимая и достаточная для хранения графа из класса (нумерованных или не нумерованных) упорядоченных корневых связных графов с п вершинами без кратных рёбер и петель, имеет размер ®(п21о^).
5. Память для хранения последовательности О(п) рёбер
В этом разделе мы исследуем вопрос о размере памяти для хранения последовательности рёбер длиной 0(п). Мы будем предполагать, что граф нумерованный из класса 0\(п,т) или ненумерованный из класса (¡2(11.111). Во втором случае будем применять естественную нумерацию вершин, основанную на обходе графа в ширину и описанную в подразделе 3.1. Длину последовательности рёбер обозначим через к. Будем считать, что п > 3. Будем предполагать, что для некоторой константы С > 0 имеет место 0 < к <Сп. Последовательность рёбер будем представлять как битовую последовательность Ребро\(\), Ребро\(2), ... Ребро\(К), 1. Здесь Ребро\(1) - это битовая последовательность /)(«,)./)(/),-1)./)((:,-1 ).1)(с11). представляющая четыре числа: а, - это номер одной из вершин, которой инцидентно 1-ое ребро, />, - это номер этого ребра в вершине щ, с,- = а?, = Ъ(афг). Здесь для числа х
используется представление !)(х). поскольку число вершин п и максимальная степень вершины заранее неизвестны.
Поскольку щ<п-1 и и>3, имеем £>(а,) <2г(и-1)+1 = 2(|_«>(и-1Х1+1)+1 < 2(1Ь(п-\)+\)+\ < 2(1Ьп+\)+\ = 21Ьп+Ъ. Такую же оценку имеем для 1)(с11). Поскольку п > 3, в связном графе 1 < Д. Имеем /)(/>,-1) < 2г(Д-1)+1 < 2([/2>(Д-1)>1)+1 < 2(#>(Д-1)+1)+1 < 2(#>Д+1)+1 = 2/6Д+3. Такую же оценку имеем для /)(с,-1).
Тем самым представление последовательности рёбер занимает память размером дф) < 2/г(2»и+3+2/М+3)+1 = 4/г#>иД+12/г+1 < 4Сп1ЬпА + 12Сп + 1. При й>ЗиД>1 имеем 1ЬпА > 1. Поэтому д(/г) < АСп1ЬпА + \2CnlbnA + п1ЬпА = (\6С+\)п1ЪпА = 0(п1о§пА).
Так как Д < 2т, имеем д(И) < (\6С+\)п(1Ьпт+\) < (32С+2)п1Ьпт = 0(п^пт). Обозначим верхнюю границу через <2(п,т) = (32С+2)п1Ьпт и сравним ее с размером памяти, необходимым для описания графа: Ь\(п,т) для нумерованного графа и Ьг(п,т) для ненумерованного графа.
Поскольку Ь\(п,т) > т1Ьп я ¿2(п,т) > п+(т-п+\)1Ьп, имеем: <2(п,т)!Ь\(п,т) < (Ъ2С+2)п1Ь(пт)/(т-\)1Ьп и
Q(n,m)/L2(n,m) < (32C+2)nlb(nm)l( (n-\)+(m-n+\)lbn).
При фиксированном (но произвольном) n > 1 и да—>оо правые части неравенств стремятся к нулю. Это значит, что размер памяти, необходимый для хранения неориентированного упорядоченного корневого (нумерованного или ненумерованного) графа с п вершинами и достаточно большим по сравнению с п числом да рёбер, больше по порядку, чем размер памяти, достаточный для хранения произвольной последовательности рёбер этого графа длины 0(п). Это, конечно, не означает, что всегда Q(n,m) < mlbn и Q(n,m) < n+(m-n+\)lbn. При малом по сравнению с п числе рёбер, например, да = п и п > 3 имеем: Q(n,n) = (Ъ2С+2)п1Ъ(п-п) > (n-l)lbn > (n-l)+(n-n+l)lbn.
Для более детального анализа можно рассмотреть граф с п вершинами, состоящий только из одного простого цикла длиной п. Сравним размеры 1\{п,п) и h(n,n) описаний этого графа с размером q(n) описания последовательности рёбер этого цикла. Имеем:
h(n,n) < 2Ibn + 2nlbn + An + 2n + 3 = 2(n+\)lbn + 6n + 3,
h(n,n) = 2llb(n-l)\ + 2n\_lb(n-l)\ + 4w + 2n + 3 = 2(n+l)[_lb(n-l)\ + 4w + 2n + 3 >
> 2(n+\)(lb(n-\)-\) + 4w + 2n + 3 = 2(n+\)lb(n-\) + 4w + 1, l2(n,n) < 2(n-n+\)(lbn+2) + 9n-6 = 2Ibn + 9n-2.
Для нижней оценки q(n) будем учитывать только часть описания последовательности, а именно номера вершин D(a,) и /)((/,). Каждая вершина инцидентна двум рёбрам из последовательности всех рёбер. Поэтому q(n) > 2S{£>(/) | /=0..и-1} = 6 + 2S{2(U>/J+1)+1 | /=1..и-1} >
> 2Е{2(»/-1+1)+1 | /=1..и-1} = 4Е{Й>/ | i=l..n-l}+n(n-l) = 4lb((n-l)\) + n(n-l)>
> 4»((2тг)1/2(и-1)и-1+1/2/еи-1) + п(п-1) > 4(и-1)»((и-1)/е) + п(п-1). Тогда q(n) / h(n,n) > (4(и-1)#>((и-1)/е) + п(п-1)) / (2(n+\)lbn + Ьп + 3) и h(n,n) / l2(n,n) > (2(n+\)lb(n-\) + 4w + 1) / (2lbn+ 9n - 2).
При и—>oo правые части неравенств стремятся к бесконечности, т.е. q(ri) по порядку больше, чем h(n,n), а 1\{п,п) по порядку больше, чем h(n,ri). Для графов с п вершинами без кратных рёбер и петель, поскольку А < п-1, имеем q(h) = 0(nlognA) = 0(nlogn2) = 0(nlogn) = o(n2logn), т.е. меньше по порядку, чем размер памяти, необходимый для хранения графа.
6. Память для хранения корневого поддерева
Если нужно хранить не произвольное множество рёбер, а поддерево с корнем в корне графа, то требуется меньше памяти. При естественной ориентации дерева от корня к листьям ребро а^Ъ задаётся его номером в вершине а. Для представления такого дерева мы будем использовать естественную нумерацию вершин дерева, основанную на его обходе в ширину. Процедура нумерации является упрощённой версией процедуры нумерации корневого упорядоченного графа, описанной в подразделе 3.1. Корень получает номер 0.
Выбирается первое ребро, инцидентное корню, и его конец получает номер 1. Далее выбирается следующее ребро, инцидентное корню, и его конец получает номер 2. И так далее. Когда исчерпаются все рёбра, инцидентные корню, аналогичная процедура выполняется для вершины 1. В общем, на каяедом шаге
у нас определены номера вершин 0.....а ' и перебраны все рёбра дерева,
инцидентные вершинам 0,...,а-1, где а<а , а для вершины а перебраны рёбра с номерами 1,...,/-1. Если / < А(а). то для вершины а рассматривается ребро с номером /'. Конец этого ребра получает номер а '+1. Когда все рёбра, инцидентные вершине с номером а, будут перебраны, т.е. когда i > А(а), переходим к следующей нумерованной вершине а+1, если а<а. Если же а = а , то процедура нумерации вершин закончена.
Располагаем описания вершин дерева в порядке этой нумерации, а для каждой вершины располагаем номера рёбер дерева, выходящих из этой вершины в естественной ориентации дерева от корня, в порядке возрастания номеров рёбер. Номер х выходящего ребра задаётся в формате D(x). Оно занимает 2г(х)+1 < 2г(Д)+1 = 2(L/Mj+1)+1 < 2/М+З бит. Конец списка рёбер дерева, выходящих из данной вершины, задаётся кодом 10 или кодом 11 для последней вершины в списке вершин. Поскольку в дереве число рёбер не больше п-1, число вершин не больше п, а Д < 2да, такое представление дерева имеет размер не больше (п-\)(21ЬА+Ъ)+2п = 0(nlogA) = 0(nlogm) = o(n+(m-n+\)logn) при любом (но фиксированном) п и да—>оо.
Для графов с п вершинами без кратных рёбер и петель Д < п-1. поэтому представление дерева имеет размер 0(nlogA) = Oinlogn) = o(n2logrí), т.е. меньше по порядку, чем размер памяти, необходимый для хранения графа.
7. Заключение
Мы исследовали размер памяти необходимый и достаточный для хранения неориентированного упорядоченного корневого графа. В разделе 2 изучался класс G\(n,m) нумерованных, а в разделе 3 - класс (¡2(11.111) ненумерованных графов с п вершинами и да рёбрами, в разделе 4 - классы (¡\(п) нумерованных и G2(n) ненумерованных графов без кратных рёбер и петель с п вершинами. Соответствующие оценки равны ®(mlogri), ®(n+(m-n+l)logn) и ®(n2logri). Эти результаты мы предполагаем, в частности, использовать в последующих статьях, посвященных решению задач на неориентированных графах с помощью коллектива автоматов. Алгоритмы работы таких автоматов существенно зависят от размера памяти каждого автомата, определяемой числом состояний и числом входных и выходных символов. Если память автомата ограничена сверху константой, это конечный автомат (робот). Если память автомата зависит от размера графа, т.е. числа его вершин п и числа его рёбер да, то мы разделяем автоматы на неограниченные автоматы и полуроботы в зависимости от того, помещается в память автомата описание любого графа из рассматриваемого класса или нет. Тем самым, указанные выше оценки
размера памяти определяют границу между неограниченным автоматом и полуроботом на соответствующих классах графов.
В разделе 5 показано, что размер памяти, достаточный для хранения последовательности 0(п) рёбер графа, равен 0(nlognA) = Oinlognm) на классах G\(n,m) и (¡2(11.111). и OQilognA) = Oinlogn) на классах (¡\(п) и (¡2(11). что меньше по порядку, чем размер памяти, необходимый для хранения графа соответствующего класса. Тем самым, автомат, с памятью такого размера является полуроботом на соответствующих классах графов. В разделе 6 показано, что для хранения поддерева с корнем в корне графа достаточно ещё меньше памяти: 0(nlogA) = 0(nlogm) на классах G\(n,m) и G2(n,m), и 0(nlogA) = Oinlogn) на классах (¡\(п) и Gz(n).
Список литературы
[1]. О.Оре. Теория графов. М., Наука, 1968.
[2]. F. Harary and Е. М. Palmer. Graphical Enumeration, Academic Press, NY, 1973.
[3]. The On-Line Encyclopedia of Integer Sequences. Catalan numbers. https://oeis.org/A000108. Дата доступа 10.02.2017.
[4]. J. H. Conway and R. K. Guy. The Book ofNumbers, New York: Springer-Verlag, 1995.
[5]. F. Bergeron, G. Labelle and P. Leroux. Combinatorial Species and Tree-like Structures, EMA vol.67, Cambridge, 1998.
[6]. R. Dutton, andR. Brigham. Computationally Efficient. Bounds for the Catalan Numbers. Europ. J. Combinatorics, vol.7, 1986.
[7]. Решение математики онлайн, http://math24.biz/. Дата доступа!0.02.2017.
Size of the memory for storage of ordered rooted graph
I.B. Burdonov <[email protected]> A.S. Kossatchev <[email protected]> Institute for System Programming of the Russian Academy of Sciences, 25, Alexander Solzhenitsyn st., Moscow, 109004, Russia
Abstract. The paper considers boundaries of memory necessary and sufficient for storage of undirected ordered rooted connected graphs, both numbered and unnumbered. The introduction contains the basic definitions and the problem statement. A graph is rooted if one of its vertices is marked as a root. A graph is ordered if for each of its vertices all the incident edges are ordered (numbered). A graph is numbered if all its vertices are numbered with different integer numbers (from 0 to n-1, where n is the number of vertices). Two undirected ordered graphs G and G' are weakly isomorphic if there exists a one-to-one correspondence between their vertices, for which corresponding vertices has the same degrees (numbers of incident edges) and two edges having corresponding ends and the same numbers in these ends, also have the other ends corresponding. Isomorphism of rooted graphs should also correspond their roots. Isomorphism of numbered graphs should also correspond the vertices with the same numbers. Graphs are considered up to weak isomorphism. It is shown that the memory necessary and sufficient for storage of any graph has the size ®(mlogn) for numbered graphs, ®(n+(m-n+\)logn) for unnumbered graphs with the number of vertices n and the number of edges m, and ®(n2logn) for graphs without multiple edges and loops with the number of vertices n. It is also shown that the memory sufficient for storage of an edge sequence of length 0(n) or a spanning tree, has the 0(nlogfn&)) or 0(nlogA) size, respectively, where A is the maximum vertex degree.
Keywords: undirected graphs; ordered graph; labeled graph; rooted graph; graph representation; graph enumeration.
DOI: 10.15514/ISPRAS-2017-29(2)-l
For citation: Burdonov I.B., Kossatchev A.S. Size of the memory for storage of ordered rooted graph. Trudy ISP RAN/Proc. ISP RAS, vol.29, issue 2, 2017, pp. 7-26. DOI: 10.15514/ISPRAS-2017-29(2)-1
References
[1]. O.Ore. Theory of graphs. AMS, Providence, Rhode Island, 1962.
[2]. F. Harary and E. M. Palmer, Graphical Enumeration, Academic Press, NY, 1973.
[3]. The On-Line Encyclopedia of Integer Sequences. Catalan numbers. https://oeis.org/A000108. Accessed 10.02.2017.
[4]. J. H. Conway and R. K. Guy. The Book of Numbers, New York: Springer-Verlag, 1995.
[5]. F. Bergeron, G. Labelle and P. Leroux. Combinatorial Species and Tree-like Structures, EMA vol.67, Cambridge, 1998.
[6]. R. Dutton, and R. Brigham. Computationally Efficient. Bounds for the Catalan Numbers. Europ. J. Combinatorics, vol.7, 1986.
[7]. The solution of mathematics online, http://math24.biz/. Accessed 10.02.2017.