Об одной задаче нумерации вершин деревьев

УДК 519.1 ДОНЕЦ Г.А.

ОБ ОДНОЙ ЗАДАЧЕ НУМЕРАЦИИ ВЕРШИН ДЕРЕВЬЕВ

Abstract. Problem on special numbering of the tree vertices, referred to as the Rosa problem, is studied here. The solution is given for some elementary tree types, namely, chain, star and caterpillar. Approaches to solving the problem in the case of more complicated trees are suggested.

Key words: numbering, vertices, tree, chain.

Анотація. Досліджується задача про спеціальну нумерацію вершин дерев, яка носить назву проблеми Роса. Наводиться її розв'язок для найпростіших типів дерев: ланцюга, зірки та гусениці. Пропонуються підходи до розв'язання проблеми на складніших деревах.

Ключові слова: нумерація, вершини, дерево, ланцюг.

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

Ключевые слова: нумерация, вершины, дерево, цепь.

1. Введение

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

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

Определение 1. Нумерацией (кодировкой) n -вершинного графа G(X,Y) называется

взаимно однозначное отображение f : X^I, где I={il3i2,...,in} - множество целых чисел, а f в

общем случае принадлежит какому-то классу функций K .

Общая задача о нумерации ставится так: для заданного графа G найти такую нумерацию f є К , чтобы функционал B(G, f) принимал наименьшее значение.

Среди задач нумерации можно выделить следующие наиболее известные.

1) Задача о ширине графа

Шириной графа G при нумерации f называется число

B(G,f ) = max{|f (X) - f (X )|:(x-, X )є Y}, а шириной графа G число B(G) = min B(G, f).

f єК

Задача о построении минимальной по ширине нумерации называется задачей о ширине графа.

2) Задача о профиле графа

Профилем графа G при нумерации f называется число

© Донец Г.А., 2010

ISSN 1028-9763. Математичні машини і системи, 2010, № 1

а профилем графа G - число Р(О) = шт .P(G,/).

Г 6К

Здесь знак @ означает смежность или совпадение. Задача о профиле возникает в вычислительной математике при обработке разреженных матриц.

3) Задача о длине гиперграфа

Пусть Н = (X,£) - некоторый гиперграф с множеством вершин X = {х1зх2,...,хп} и множеством ребер £ = {е1, е2,..., ет }.

Нумерацией (кодировкой) п-вершинного гиперграфа Н = (X,£) называется взаимно однозначное отображение /: X ^ I, где I = {/1з/2,..., 1т} - нумерующая последовательность из целых чисел. Длиной гиперграфа Н = (X,£) при нумерации / называется число

а длиной гиперграфа H = (X ,Є) - число d (H) = min d (H, f).

f єK

Задача о длине гиперграфа возникает в ряде практических задач при автоматизации проектирования интегральных схем и компонент компьютеров, в биологии при решении задач о наследственности, а также в различных областях теории информации.

Здесь рассматривается одна задача нумерации деревьев, которая в свое время, после первого упоминания в работах [1-3], получила название как проблема Роса (A. Rosa). С тех пор обнаружено много источников, где идет речь об этой проблеме, однако до сих пор вопрос о ее решении (или невозможности решения) остается открытым.

2. Постановка задачи и ее решение для простых случаев

В терминах, определенных выше, ставится следующая задача.

Задача. Для n -вершинного дерева (n > О) необходимо найти такую нумерацию (кодировку) его вершин множеством натуральных чисел {1,2,...,n}, чтобы абсолютные разности кодов смежных вершин составляли множество {1,2,..., n -1}.

В дальнейшем, если получена такая нумерация, будем называть ее правильной. В данной работе предпринимается попытка найти индуктивный подход получения правильной нумерации для некоторых подклассов деревьев. Для начала докажем несколько несложных утверждений. Пусть получена некоторая правильная нумерация исходного дерева X = {x1,x2,...,xn}, где

Лемма 1. Всякой правильной нумерации вершин дерева соответствует другая правильная нумерация, которая получается с помощью перекодировки

X] - п +1 - х1.

max f (x.) - min f (x,) , еє є ,

V. С О V . (= о '

f єK

Это легко проверить, учитывая то, что абсолютные разности смежных вершин при этом не меняются. Действительно, для ребра (х, xj), (] Ф ]) справедливо

|х] — х}| = |(п +1 - х]) - (п +1 - х}-)| = |хг- - х; |. Будем называть полученную таким образом

нумерацию X , ={х1, х2,..., хп} двойственной к исходной нумерации X = {х1з х2,..., хп}. Очевидно, что для правильной нумерации вершина с кодом 1 обязательно смежна с вершиной с кодом п , так как только при этом может быть реализована абсолютная разность |п -1|.

Лемма 2. Произвольная п -вершинная звезда допускает правильную нумерацию.

Это легко достигается, если занумеровать центральную вершину звезды числом (кодом) 1, а остальные вершины - кодами 2,3,..., п в произвольном порядке. В результате все абсолютные разности будут получены вычитанием единицы от остальных чисел, что и дает требуемое множество {1,2,...,п -1}. Аналогично правильная двойственная нумерация получится, если центральную вершину звезды закодировать числом п.

Лемма 3. Произвольная п -вершинная цепь допускает правильную нумерацию. Доказательство можно выполнить двумя способами. Первый является индуктивным. Для цепи с двумя вершинами (одно ребро) правильная нумерация тривиальна - вершины обозначаются числами 2 и 1, а множество абсолютных разностей состоит из одного элемента {1}. Присоединим третью вершину к вершине с кодом 1 и занумеруем ее числом 3. Теперь множество абсолютных разностей равно {1,2} и одна из конечных вершин цепи имеет максимальный номер п. Представим, что получена правильная нумерация к -вершинной цепи, при этом одна из ее конечных вершин имеет код к. Перейдем к двойственной нумерации, тогда код этой вершины станет равным 1. Прибавим к этой вершине ребро, а конечной вершине его присвоим код к +1. Тем самым получим дополнительную абсолютную разность к, что в целом соответствует правильной нумерации (к +1) - вершинной цепи. Увеличивая к , постепенно получим искомую правильную нумерацию произвольной цепи.

Второй способ указывает непосредственно правильную нумерацию для произвольного п. Для этого первой вершине присвоим код 1, третьей вершине - код 2 и так далее нумеруем все

вершины с нечетными номерами, пока не получим код

+1. Затем в обратном порядке (справа

порядковым номером 2І -1(1 < і <

+1 ) присваиваем код ], а вершине с порядковым

п 2

налево) нумеруем оставшиеся вершины по возрастанию кодов. В результате вершине с

п 2

номером 2] - код п +1 - ]. Каждое ребро (2] -1, 2]) имеет абсолютную разность кодов п +1 - 2], а ребро (2], 2] +1) - соответственно п - 2], что в совокупности составляет множество {1,2,..., п -1}. При этом разности располагаются в убывающем порядке (рис. 1).

Рис. 1. Правильная нумерация цепей для п = 8 и п = 11 Самое интересное то, что нумерации, полученные двумя способами, совпадают. Из доказательства индуктивного способа нумерации в лемме 3 вытекает, что если какое-то п -вершинное дерево имеет правильную нумерацию, то можно к вершине с кодом 1 прибавить произвольное число ребер (например, к > 0) и занумеровать новые вершины кодами п +1, п + 2,...,п + к и при этом получим правильную нумерацию нового графа. Действительно, к

прежнему множеству абсолютных разностей {1,2,..., п} добавляются элементы п,

п +1,..., п + к -1, что в совокупности и требуется для нового графа. Если в этом графе перейти к

двойственной нумерации, то вершина с кодом п + к приобретет код 1 и тогда к ней опять можно присоединить новые ребра и легко получить правильную нумерацию. Этот прием можно применять достаточное количество раз.

Определение 2. Дерево, которое после удаления висячих вершин (то есть вершин, степень которых равна 1) превращается в цепь, называется гусеницей.

Теорема 1. Гусеница допускает правильную нумерацию.

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

Рис. 2. Последовательная нумерация гусеницы Нетрудно убедиться, что всякая гусеница представляет собой объединение нескольких звезд, в котором центры двух соседних звезд соединены ребром. После удаления всех висячих вершин остается цепь, которая соединяет центры всех исходных звезд. Будем изображать гусеницу списком (набором) к степеней центральных вершин звезд в виде (п1,п2,...,пк ). Например, гусеницу на рис. 2 б из 15 вершин представим как набор (6,5,5). В общем случае вся

к

гусеница будет иметь п = ^щ -1 вершин. Закодируем первую звезду так, чтобы центральная

г=1

вершина имела код п1 +1, а остальные вершины - от 1 до п1, при этом единицу присвоим центральной вершине второй соседней звезды. В результате получим множество абсолютных разностей {1,2,..., п1}. Оставшиеся вершины второй звезды занумеруем кодами п1 +1,

п1 + 2,...,п1 + п2, при этом максимальный код присвоим центральной вершине третьей соседней

звезды (рис. 2 а). Это будет правильная нумерация, так как она содержит все абсолютные разности

от 1 до п1 + п2 -1. Если теперь перейти к двойственной нумерации, то центральная вершина

третьей звезды приобретет код 1, а ее оставшиеся вершины можно занумеровать кодами

п1 + п2 +1, п1 + п2 + 2,..., п1 + п2 + п3 -1. Этот процесс можно продолжать, пока не получим

правильную нумерацию всей гусеницы (рис. 2б), что свидетельствует о справедливости теоремы 1.

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

1. Нумерацию проводим последовательно в порядке возрастания кодов от 1 до п.

2. В каждой звезде отличаем центральную (верхнюю) и нижние вершины.

Алгоритм правильной нумерации гусеницы проводится в два этапа: прямой и обратный.

Прямой этап: код 1 присваиваем верхней вершине первой звезды. Затем кодируем нижние вершины второй звезды и так далее, потом переходим к следующей звезде, чередуя верхние и нижние вершины, пока не закодируем какую-то часть (верхнюю или нижнюю, в зависимости от четности к) к -й звезды.

Обратный этап: кодируем оставшиеся вершины к -й звезды. Затем кодируем оставшиеся вершины (к -1)-й звезды и так далее, заканчивая вершинами первой звезды.

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

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

Лемма 4. Если к вершине с кодом 1 дерева с правильной нумерацией присоединить гусеницу, то новое дерево допускает правильную нумерацию.

Если существует некоторый подкласс деревьев, допускающий такую правильную нумерацию, что код 1 можно присвоить в дереве произвольной вершине, то решение проблемы Роса можно расширить. Действительно, добавляя различные гусеницы к определенной вершине, можно получить множество более сложных деревьев, для которых существует правильная нумерация. Пока известен только один тип деревьев, допускающий при правильной нумерации присвоение кода любой вершине, - это звезды. Однако это не продвигает решение проблемы ни на шаг вперед, так как присоединение гусеницы к звезде дает нам только новую гусеницу.

Определение 3. Назовем сдвигом нумерации перекодировку вершин по правилу хг = хг + Д(1 < г < п), где А - целое число, не равное нулю.

Определение 4. Назовем реверсом цепи с правильной нумерацией ее поворот в плоскости на 180° с сохранением нумерации.

Обозначим /п (г) правильную нумерацию л-вершинной цепи, у которой код 1 принадлежит

г -й вершине, если считать вершины цепи слева направо. Существует гипотеза, что /п(г) возможна для произвольного 1 < г < п. Будем рассматривать это утверждение только для

і <

п + 1 п +1

. Если і >

_ 2 _ _ 2 _

І = п +1 - і, и справедливо І < и цепочки неравенств:

і >

, то делаем реверс цепи, и тогда вопрос сводится к /п(у), где п +1

2

. Это вытекает из известного равенства п

п п +1

— +

_ 2 _ _ 2 _

п +1 п +1 ^ п +1 - і < п +1 - п + 1 ^ п +1 - і < п

^ - і < - —

_ 2 _ _ 2 _ _ 2 _ _ 2 _

+1 ^

І = п +1 - і <

п +1 2

Для і = 1 правильная нумерация получается из леммы 3. Для і = 2 правильную нумерацию можно получить аналогично. Так как вершины с кодами 1 и п всегда смежны, то для

і = 1 вторая вершина имеет код п. Если теперь перейти к двойственной нумерации, то вторая вершина получит код 1, что и дает /п(2). Пусть і = 3 . Обозначим gn(к) правильную нумерацию п-

вершинной цепи, у которой первая вершина имеет код к(1 < к < п).

Лемма 5. Правильная нумерация /п (3) сводится к нумерации gn-3 (2), а gn (2) сводится к

gп-3 (2) .

Для доказательства рассмотрим п -вершинную цепь, у которой первую вершину отметим кодом 2,

а третью - кодом 1. Очевидно, что вторая вершина будет иметь код п, а четвертая - код п - 2

(рис. 4). Остальные вершины будут закодированы в соответствии с правильной нумерацией /п (3).

Удалим первые три вершины цепи. . Теперь получим цепь из п — Ъ вершин,

которые занумерованы кодами от п — 2 до п ,  при этом присутствуют все абсолютные

разности от 1 до п — 4. Это значит, что, если ' в этой цепи уменьшить коды на 2 единицы, то

получим gn-3(п - 4). Если теперь перейти к

Рис. 4. Иллюстрация к лемме 5

двойственным переменным, то gn_3(n - 4) = gn_3[n - 2 - (п - 4)] = ^п_3(2) , что и требовалось доказать. Так как в данном случае /п (3) = gn (2), то доказано и второе утверждение.

Эта лемма позволяет построить алгоритм правильной нумерации /п (3) для произвольных п. Для этого находим непосредственно правильную нумерацию для gя(2), где 1 = n(mod3) и 2 < 1 < 4 . Она легко находится из построения /я(г) для г = 1,2 и приведена на рис. 5. Назовем ее базовой нумерацией для /п (3) или gn (2).

©-© ©-©-© (2М1)-©-

/7 = 2

П = о

п=4

Рис. 5. Базовая нумерация для gn

Затем поэтапно выполняем следующие операции из трех шагов на каждом этапе.

1. Переходим к двойственной нумерации.

2. Делаем сдвиг нумерации А = +2 , при этом п  п + 3 .

3. Добавляем слева к цепи три вершины с кодами 2, п , 1.

Рис. 6. Схема построения /10

2-1

После —-— этапов получим цепь с длиною, которая будет задана, и правильную нумерацию

/п (3). Продемонстрируем алгоритм на примере цепи с п = 10. Базовая цепь содержит 4 вершины, так как 10 ° 4(mod3). В результате двух этапов получаем /10 (3) (рис. 6).

3. Заключение

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

можно строить правильную нумерацию /п(г) и для г > 3. Это пригодится для построения

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

СПИСОК ЛИТЕРАТУРЫ

1. Ringel G. Problem 25: Theory of Graphs and its Applic / G. Ringel // Proc. of the Symp. - 1964. - June. - Р. 164.

2. Rosa А. On certain valuations of the vertices of a graph / A. Rosa // Theory of Graphs [ed. P. Rosenstehl, Gordon and Breach]. - New York, 1967. - Р. 349 - 355.

3. Cahit А. On graceful trees / A. Cahit // Bull. of the ICA. - 1994. - 12 September. - Р. 15 - 18.

Стаття надійшла до редакції 22.11.2009