Научная статья на тему 'Минимальные нумерации корневых ориентированных деревьев с выделенной вершиной'

Минимальные нумерации корневых ориентированных деревьев с выделенной вершиной Текст научной статьи по специальности «Математика»

CC BY
460
41
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
НУМЕРАЦИЯ / ОДНОКОРНЕВОЕ ОРИЕНТИРОВАННОЕ ДЕРЕВО

Аннотация научной статьи по математике, автор научной работы — Шелухин Дмитрий Сергеевич

Рассматривается задача построения нумерации вершин однокорневого ориентированного дерева, минимизирующей сумму номера выделенной вершины и среднего расстояния между номерами всех пар смежных вершин. Приводится алгоритм ее решения с трудоемкостью O ( n log n ).

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

MINIMAL ENUMERATIONS OF ROOTED DIRECTED TREES WITH AN ACCENTUATED VERTEX

The vertex enumeration problem is considered of a single-rooted directed tree to minimize the sum of the accentuated vertex number and the average distance between the numbers of all pairs of adjacent vertices. An algorithm of the problem solution with complexity O( n log n ) is presented.

Текст научной работы на тему «Минимальные нумерации корневых ориентированных деревьев с выделенной вершиной»

Матем атика

Вестник Нижегородского университета им. Н.И. Лобачевского, 2012, № 5 (1), с. 171-178

УДК 519.1

МИНИМАЛЬНЫЕ НУМЕРАЦИИ КОРНЕВЫХ ОРИЕНТИРОВАННЫХ ДЕРЕВЬЕВ

С ВЫДЕЛЕННОЙ ВЕРШИНОЙ

© 2012 г. Д.С. Шелухин

Нижегородский госуниверситет им. Н.И. Лобачевского

[email protected]

Поступила в редакцию 25.05.2012

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

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

Введение

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

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

Задача размещения графов в общем случае является КР-трудной [1], однако для целого ряда классов графов разработаны полиномиальные алгоритмы ее решения [2]. Для деревьев был предложен алгоритм линейного размещения, минимизирующий среднее расстояние между смежными вершинами (минимальные нумерации) с трудоемкостью 0(па), а = ^23 [3]. Для корневых ориентированных деревьев имеются алгоритмы построения минимальной нумерации с трудоемкостью О(п^п) [4]. В данной статье рассматривается алгоритм построения минимальной нумерации для однокорневых ориентированных деревьев с выделенной вершиной с трудоемкостью О(п^п).

Основные понятия и определения

Пусть G(V, Е) - произвольный граф, содержащий п вершин; А = {а1,а2,...,ап} - множество п натуральных чисел. Нумерацией графа G(V, Е)

будем называть взаимно однозначное соответствие ф: V ^ А, где множество А - нумерующля песледерлтельнесть графа. При нумерации ф каждой вершине V і є V сопоставляется номер ф(уг), а каждому ребру е = (у, V.) є Е - число

А* =1 ф(у)- ф(у.) | (длина ребра (у., у) при нумерации ф. Длнней графа G(V, Е) при нумерации ф называется величина Аф G = ^ Аф . Нуме-

еєЕ

рации, на которых достигается тіпфД^ = Д^) называются минимальными нумерациями.

Пусть А = {аьа2,...,а„}, а. < а,+ь і = 1,2,.. ,,п - 1,

- произвольная нумерующая последовательность. Каждое целое число, заключенное между а1 и ап и не входящее в А, будем называть пре-белем. Общее количество пробелов в А обозначим через Р(А) = (ап - а1) - (п - 1). Если Р(А) = 0, то нумерующая последовательность - сплешнля.

В [2] приводится доказательство следующей леммы:

Лемма 1. Для любой нумерации ф^ ^ А, Р(А) > 0, графа G(V, Е) и любой ~: V^ А, Р(А) = 0, сохраняющей порядок нумерации ф (вершины ф-1(а.) и ~ '(а.) совпадают при любом і = 1, п), имеет место АфG > А~G + Р(А).

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

Для класса однокорневых ордеревьев задача поиска минимальной нумерации была решена, например, в [2]. Алгоритм минимальной нуме-

Рис. 1

Рис. 2

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

Свойства минимальных нумераций с выделенной вершиной

Выделим в однокорневом ориентированном дереве ^, Е) некоторую вершину V* е V и рассмотрим нумерацию, минимизирующую функционал

Д^ + ф(у), (1)

где ф^ ) - номер, присвоенный выделенной вершине V* е V при нумерации ф.

Нумерацию дерева, минимизирующую функционал (1), будем называть минимальной нумерацией с выделенной вершиной.

*

Очевидно, что если выделенная вершина V совпадает с корнем дерева, то минимум функционала (1) будет достигаться тогда и только тогда, когда минимально (т.к. ф^ ) = 1).

Рассмотрим случай, когда выделенная вершина не является корнем. Пусть для некоторого дерева t существует нумерация ф, минимизирующая (1). Так как нумерация ф соответствует ориентации дерева, то вершина ф-1(п) является висячей. Рассмотрим путь о0 из корня дерева в вершину ф-1(п). Поддеревья, порожденные дугами, не принадлежащими о0, обозначим через

tф0, г = 1, k (рис. 1). Справедлива следующая лемма:

Лемма 2. Если V* е , то существует такая минимальная нумерация ф дерева t с выделенной вершиной V , при которой нумерующие последовательности поддеревьев ,С -

сплошные.

Доказательство методом от противного. Рассмотрим любую минимальную нумерацию ф дерева t с выделенной вершиной V . Обозначим через t поддерево, которое включает в себя все вершины, не входящие в поддерево tф0 (рис. 2). Занумеруем поддеревья tф0 и t сплошными

нумерующими последовательностями, сохраняя порядок исходной нумерации ф. Это всегда можно сделать, так как нумерующая последовательность всего дерева - сплошная. Полученную нумерацию обозначим ф. Минимизируемый функционал представим в следующем виде: Афі + ф(у* ) = Афст 0 + Афіф0 + Афіф0 + ...+ Афtіст 0 +

+ ф(у* )=Афіф0 + Аф~ + Афе + ф(у*), где е - дуга, соединяющая первую и вторую вершины пути о0 (обозначим ее концевые вершины через и у2 , ф(уе )= 1).

При переходе от нумерации ф к ф получим ф(у ) > ~(у ), поскольку порядок нумерации для поддеревьев іф0 и / не изменяется, а вер-

* ф ^

шина V є t10 будет занумерована одним из первых п1 =| іф0 | номеров. По лемме 1 имеем Афіф0 >Афіф0. Рассмотрим теперь слагаемое Афе : Афе < Афе , когда ф(у2 ) > фУ ). Пусть

~(у2 )-ф(у2 )= к. Вершина у2 является корневой вершиной поддерева t, следовательно, количество пробелов в нумерующей последовательности поддерева / при нумерации ф равно: п-ф(у2)+ к -|ф |-1 = к, учитывая, что в ~ нумерующая последовательность поддерева / -сплошная. Тогда по лемме 1 Аф t +Афе > > Аф t + Аф е . Таким образом, нумерация ф также является минимальной.

Так как поддерево Ґ не содержит вершины

*

V и занумеровано сплошной нумерующей последовательностью, то при минимальной нумерации ориентированного поддерева і с корнем

е __ _ ____ * ф А * ф А

в вершине у2 нумерации поддеревьев і20,... ,іі 0

- сплошные. Таким образом, построенная нумерация ф удовлетворяет условиям леммы.

Теперь рассмотрим более общий случай, когда вершина V не находится в первом поддереве. Пусть вершина V принадлежит поддереву іф0, 1 < і < к. Разобьем дерево і на поддерево іь состоящее из поддеревьев іф0,іф0,... ,іф0 и под-

дерево і2, содержащее поддеревья і. вершину ф-1(п) (рис. 3). Справедлива

і+1,. , Ч0 и

Лемма 3. Существует минимальная нумера-

*

ция ф дерева t с выделенной вершиной V , при которой нумерующие последовательности поддеревьев ^ и ^ — сплошные.

Доказательство. Представим минимизируемый функционал в виде:

Дфt + ф^*) = Д% + Д\ + Дфе + ф^*), где е - ребро, связывающее поддеревья t1 и ^.

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

что Д% <Дф71, Д% <Дфt2 и ф>*) <ф^*). Остаётся рассмотреть ребро е = ^; v2), v1<’ е t1, а

VI е t2. Допустим, что при нумерации ф значение v1e уменьшилось на k. Обозначим нумерующую последовательность поддерева t1 при нумерации ф через А = {1, а2,...,а }, а при нумерации ф - через В = {1,2,.,Ьщ }. В связи с тем, что в ф и ф порядок нумерации совпадает, в последовательностях А и В вершине v1e соответствует один и тот же порядковый номер с конца (обозначим его 5). Если номер вершины v1e уменьшился на k, то номер ап-5+\ = Ьп-5+1 + k = = Щ - 5+ 1 +k. Очевидно, что при этом ап1 > п1 + k. Нетрудно видеть, что количество пробелов Р(А\) > k. Аналогично доказывается, что если | ф^2е)- ф^2е )| = j , то в первоначальной нумерующей последовательности поддерева Ь было не менее ] пробелов. Отсюда следует, что даже если длина дуги е увеличилась на k + ], то

это увеличение будет скомпенсировано (по лемме 1) тем, что поддеревья ^ и ^ нумеруются сплошными нумерующими последовательностями: Дфtl + Д^2 + Дф(е) > Д% + Д^2 + Дф(е).

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

Замечание. Поддерево Ь - это однокорневое ориентированное дерево со сплошной нумерующей последовательностью (алгоритм его нумерации известен). Теперь рассмотрим поддерево t1. Оно соединено с деревом ^ через вершину v1e. Из структуры поддерева t1 следует,

что ф^е ) <ф(^*). Пусть ф^*) = ф^е ) + р -1, где р - номер вершины V в поддереве ti 0, при ф^е) = 1. Следовательно, задача сводится к построению нумерации дерева и, минимизирующей функционал

¥ = Д^ + ф(v*)- ф^)= Дt1 + р -1.

Здесь слагаемое р будет меняться только при нумерации поддерева tJ'т 0.

Для примера приведем минимальные нумерации однокорневого ориентированного дерева с выделенной вершиной (рис. 4а и 4б).

На рисунках выделенная вершина отмечена дополнительным кружочком. Очевидно, что ни одна из этих нумераций не является минимальной нумерацией соответствующего однокорневого ориентированного дерева. На рисунке 4а путь о0 был выделен в левом поддереве, а нумерация иллюстрирует положение леммы 2. На рисунке 4б для того же дерева путь о0 был выделен в правом поддереве, соответственно, нумерация иллюстрирует положение леммы 3.

Рис. 3

Рис. 4

Ценность лемм заключается в том, что они позволяют свести исходную задачу к аналогичной задаче на поддеревьях (при известном способе выделения пути о0). Действительно, если справедливы условия леммы 2, то очевидно, что задача сводится к поиску минимальной нумерации поддерева ^а° (остальная часть дерева не содержит выделенной вершины, следовательно, может быть занумерована с помощью алгоритма минимальной нумерации однокорневого ориентированного дерева). Если же цепь о0 выделялась согласно условию леммы 3, то исходная задача вновь подразбивается на несколько более простых: минимизировать нумерацию

поддерева Ь (что осуществляется по уже известному алгоритму) и минимизировать нумерацию поддерева t1. Для нумерации t1 можно применить следующий приём: вначале занумеровать дерево так, как будто в нём нет выделенных вершин. При этом поддерево ^а° будет занумеровано сплошной нумерующей последовательностью. После этого необходимо занумеровать поддерево ^а° как однокорневое ориентированное дерево с выделенной вершиной, используя ту же сплошную нумерующую последовательность, что была получена для этого поддерева при начальной нумерации дерева t1. Обоснование правильности этого действия основано на замечании, сделанном после доказательства леммы 3.

Введем обозначения: пусть v0 - корень дерева, а поддеревья ^1), ^2),..., ^р),р > 1, порождены конечными вершинами всех дуг, выходящих из Vо: (vо, V:), (vо, V2),..., (vо, vp). Теперь, используя леммы 2 и 3, можно утверждать следующее:

Лемма 4. Существует такая минимальная нумерация ф дерева t с выделенной вершиной

V , при которой нумерующие последовательности поддеревьев ^1), ^2),..., t(Vp), р > 1, сплошные, кроме, быть может, поддерева, содержащего вершину V .

Доказательство. Возьмём минимальную нумерацию ф дерева t с выделенной вершиной

V и рассмотрим разбиение на цепи. Если цепь

о0 была выделена в поддереве 1 < I < р, не содержащем вершины V , то, по лемме 2, существует такая минимальная нумерация ф дерева t, что поддерево ^1) будет занумеровано сплошной нумерующей последовательностью. Следовательно, условия леммы могут быть не выполнены только на поддереве А^^), которое теперь можно взять за исходное и начать доказательство с начала. Пусть теперь цепь о0 была выделена в поддереве ^к), 1 < к < р, содержащем вершину V . Этот случай соответствует

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

Из доказательства этой леммы можно вывести

Следствие. Существует такая минимальная нумерация ф дерева t с выделенной вершиной

V , при которой нумерующие последовательности поддеревьев ^1), ^Х..., ^р), р > 1, сплошные, кроме, быть может, поддерева, содержащего вершину V , и, при выделении цепи в поддереве, содержащем вершину V , образующееся при этом поддерево ^ также нумеруется сплошной нумерующей последовательностью.

Теперь рассмотрим механизм выделения пути о0. Пусть число вершин в поддереве ^г), содержащем выделенную вершину V , равно п , а ^]) = п , у Ф г. Предположим, что минимальная нумерация поддерева ^,) известна. Выделим внутри этого поддерева путь о0 (из корня в лист с максимальным номером) и разобьём его на поддеревья ^ и ^ так: если при выделении о0

* 7 / ^

вершина V оказалась в поддереве tl0 (случай леммы 2), то ^ будет выделяться так же, как и поддерево t в доказательстве леммы 2. В поддерево ^ войдут все остальные вершины поддерева ^,). Если же вершина V попала в поддерево ^0, гф1, (случай леммы 3), то поддерево Ь будет выделяться так же, как при доказательстве леммы 3, а в поддерево t1 войдут все остальные вершины ^г) (рис. 5а и 5б).

Теорема 1. Существует минимальная нумерация ф дерева t с выделенной вершиной V , такая, что цепь о0 будет выделена в поддереве ^,)

*

тогда и только тогда, когда р k, п >п2 и п > —.

Доказательство. Предположим, что найдется такое k, что п >п2 и п >п /2, но при нумерации ф, удовлетворяющей следствию из леммы 4, цепь о0 была выделена в поддереве ^,). Тогда можно говорить о порядке нумерации поддеревьев t), у = 1, р, у ^ г, не содержащих

*

вершину V . Пусть г - индекс поддерева, удов-

Г у *

летворяющего условиям п >п2 и п >п /2 и занумерованного, при этом, последним среди та-

Рис. 5

ких поддеревьев. Построим по нумерации ф нумерацию ф следующим способом: занумеруем поддерево ^г), 1^) = п, последними п номерами во всем дереве t, а в остальном - сохраним исходный порядок нумерации. Сравним нумерации ф и ф . Для поддеревьев, не содер-*

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

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

*

поддеревьев, не содержащих вершину V , длина ребра, соединяющего корень исходного дерева и корень поддерева, уменьшилась на пг. С другой стороны, наличие таких поддеревьев означало бы увеличение длины ребра от корня исходного дерева к корню поддерева ^г) на количество вершин в этих поддеревьях. (Заметим, что в каждом таком поддереве меньше пг вершин из-за выбора поддерева ^г), и поскольку нумерация ф является минимальной с выделенной вершиной V и о0 не проходит через ^у), у ф Ф г, то таких поддеревьев нет). Рассмотрим нумерующую последовательность поддерева ^г) относительно номера вершины V . Пусть V была занумерована после поддерева ^г). Тогда переход от ф к ф уменьшит как номер вершины

V , так и количество пробелов в нумерующей последовательности поддерева ^,) (или уменьшит ребро, соединяющее корень дерева t и поддерева ^г)). Обе величины уменьшатся на п. Увеличение ребра, соединяющего корень дерева t и поддерева ^У), произойдет не более чем на п . Так как пг >п /2, то в данном случае переход от ф к ф не увеличит длину разбиения.

*

Предположим теперь, что вершина V была занумерована до начала нумерации поддерева ^г). В этом случае переход от ф к ф не изме-

*

нит номер вершины V . При этом нумерующая последовательность поддерева ^г) состоит из номеров, пропущенных в нумерующей последовательности поддерева ^г). Пусть количество вершин поддерева ^,), занумерованных после

поддерева ^г), равно некоторому а, а = п2, п*. Подсчитаем количество граничных ребер поддерева ^г), концевые вершины которых зану-

мерованы до и после поддерева ^уг). Если такое ребро одно, то оно обязано принадлежать цепи

о0. По построению поддеревьев t1 и ^, это может быть только ребро, ведущее из ^ в ^ (в противном случае вершина V будет занумерована после поддерева ^уг)). В этом случае а = ^| = п2. В случае, если граничных ребер несколько, каждое из них уменьшится на пг (можно при этом считать а = п как худший случай). В итоге получим, что длина нумерации изменится на а - / п, где / - количество ребер, соединяющих части поддерева ^г), занумерованные до и после поддерева ^уг). Это выражение будет отри-

Г г *

цательным, если п >п2 и п >п /2.

Теперь рассмотрим второй случай: $ k, п > п2

*

к п ,

и п > —, к Ф і, но при нумерации ф, удовлетворяющей следствию из леммы 4, цепь о0 была выделена в поддереве t(ук), к = 1, р, к Ф і, а не в поддереве ^і).

Вариант 1: п < п2. Для начала докажем, что У/, п > п, если ф(у/) > ф(у ). Действительно, пусть и = тах/У), ф(у) > ф(у ). Тогда построим по нумерации ф нумерацию ф1 следующим способом: занумеруем поддерево t(уи) последними пи номерами во всем дереве t, а в остальном -сохраним исходный порядок нумерации. Сравним нумерации ф и ф1. Для поддеревьев, занумерованных до ^уи), нумерации ф и ф1 совпада-

*

ют. Номер вершины у также не изменился. Для остальных поддеревьев t(у/), / = 1, р, / Ф и,

ф(у/) > ф(уи), длина ребра, соединяющего корень исходного дерева и корень поддерева, уменьшилась на п . Для поддерева длина ребра (у0, уи) увеличилась на I п , / = 1, р, / Ф и, ф(у/) > ф(уи).

В связи с тем, что пи > п ,/ = 1, р, ф(у/) > ф(у ), значение функционала при нумерации ф1 меньше, чем при нумерации ф. Значит, если о0 была

выделена в поддереве t{ук), к є 1, р, к Ф і, то к = = тах/п^, ф(у/) > ф(у ).

Теперь аналогичным образом строим нуме-

2

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

I п , / = 1, р, / Ф і, ф(у/.) > ф(у'2 ), где у‘2 - корневая вершина поддерева ^. Так как в рассматриваемом варианте пк < п2 У к, ф(ук) > ф(у<2), то переход от ф к ф2 не увеличит длину разбиения.

*

Вариант

2: пк <у

. Так как первый вариант уже рассмотрен, мы ограничимся рассмотрени-

*

ем случая, когда п2 < —. Построим по нумерации ф нумерацию ф3 следующим способом: занумеруем поддерево ^у,) последними п номерами во всем дереве t, а в остальном - сохраним исходный порядок нумерации. Очевидно, что при таком переходе дуга в каждое поддерево, которое было занумеровано после ^у,), уменьшится на п , однако дуга в само поддерево ^у,)

и номер вершины у* увеличатся на I п/,

/ = 1, р, / ф і, ф(у/) > ф(у,). Но, в силу рассматриваемого варианта, длина разбиения при пере-

3

ходе от ф к ф уменьшится.

На основании Теоремы 1 можно сформулировать алгоритм минимальной нумерации однокорневого ориентированного дерева с выделенной вершиной.

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

Назовем алгоритм для данной задачи алгоритмом 2, в отличие от алгоритма 1, используемого при построении минимальной нумерации однокорневого ордерева. При описании алгоритма будем придерживаться обозначений, использовавшихся при доказательстве теоремы 1. На вход алгоритма подается дерево t с выде-

*

ленной вершиной V .

Шаг 1. Если вершина V - корневая, занумеровать дерево t с помощью алгоритма 1 и идти на Шаг 6, иначе занумеровать поддерево t(уi),

V е t(у), с помощью алгоритма 2.

Шаг 2. ^ для дерева t - это максимальное по включению поддерево в ^,), содержащее вершину с максимальным, присвоенным на шаге 1,

номером и не содержащее ни вершину у , ни

і і *

одного из ее предков; п2 = К2І, п1 = п - п2.

Фаза 1. Нумеровать все поддеревья ^у),

/ = 1, р , / ф і, удовлетворяющие условиям:

А) не содержат в себе вершину у ,

*

п

Б) удовлетворяют условию п > п2 и п > —.

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

Шаг 3. Когда все «большие» деревья занумерованы, необходимо занумеровать поддерево ^ с помощью алгоритма 1. Так как на шаге 1 поддереву ^ уже присвоены номера, нам нужно лишь увеличить эти номера на число, равное разнице между последним оставшимся номером в нумерации исходного дерева и текущим последним номером в нумерации дерева Ь (но можно просто занумеровать дерево Ь по алгоритму 1, используя последние оставшиеся п2 номеров, которые затем удаляются из нумерующей последовательности).

Шаг 4. Незанумерованными остались только «малые» (не удовлетворяющие условиям А и Б) поддеревья корневой вершины и поддерево

Ку)У2.

Фаза 2. Теперь найти незанумерованное поддерево корневой вершины максимальной мощности (для поддерева, содержащего вершину у , считаем мощность равной пі) и нумеровать его. Пусть это будет поддерево ^ук).

Если у й t(ук), то нумеровать его с помощью алгоритма 1 сплошной нумерующей последовательностью, присваивая ему последние из оставшихся номеров (с удалением этих номеров из последовательности).

Если у є t(ук), то увеличить номера поддерева ^у-)У2 так, чтобы поддерево было занумеровано последними оставшимися п1 номерами (которые мы удаляем из нумерующей последовательности).

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

Шаг 6. Завершить алгоритм нумерации (если алгоритм вызывался рекурсивно, то здесь будет произведен возврат на предыдущий уровень рекурсии).

*

Рис. 8

Проиллюстрируем алгоритм на примере корневого ордерева, изображенного на рис. 6. У дерева, изображенного на рисунке, есть 3 корневых поддерева: левое имеет 3 вершины, центральное содержит 6 вершин, в том числе выделенную вершину (обозначенную двойным кружочком), и правое имеет 5 вершин. На шаге 1, в данном случае, нужно занумеровать центральное поддерево. Результат приведен на рисунке 7.

На шаге 2 нужно определить параметр п2. В данном случае он оказывается равен 4 (рис. 8а). Затем начинается Фаза 1. В этой фазе нумеруются все достаточно большие деревья. В нашем примере правое поддерево удовлетворяет условиям А и Б алгоритма, соответственно оно получит последние 5 номеров. На рисунке 8б изображена нумерация дерева после шага 2. Окончательные номера отмечены жирным шрифтом.

На шаге 3 нужно занумеровать поддерево Ь. Это показано на рисунке 8в.

На шаге 4 начинается Фаза 2, в которой необходимо занумеровать «малые» поддеревья и оставшуюся часть поддерева, содержащего выделенную вершину. В примере левое поддерево имеет больше вершин, чем поддерево ^у^^ (больше незанумерованных вершин, чем центральное или правое), поэтому оно получит последние 3 номера из оставшихся. Это продемонстрировано на рисунке 8г.

Далее потребуется повторить шаг 4, чтобы занумеровать поддерево ^у-)У2. В конце получаем нумерацию, изображенную на рис. 8д.

Теорема 2. Алгоритм 2 имеет временную сложность О(п^п).

Доказательство. Проведем доказательство по индукции в зависимости от расстояния между корнем дерева и вершиной V . Основание индукции: если V является корнем, то алгоритм превращается в алгоритм 1, для которого утверждение теоремы, очевидно, верно.

Индуктивный переход: пусть утверждение теоремы выполнено для деревьев с расстоянием от корня до вершины V , равным к, докажем, что и для расстояния, равного к +1, утверждение также выполняется. Пусть у корневой вершины h потомков, а количество вершин в поддереве, содержащем вершину V , равно щ. Сначала занумеруем поддерево, содержащее вершину V . По предположению индукции сложность этой операции составляет O(n1logn1) При этом на шаге 2 мы можем получить информацию о дереве ^ для исходного дерева: первое поддерево, которому будут присвоены номера на шаге 2 (самое большое поддерево), будет являться деревом ^. Если не нашлось поддеревьев, удовлетворяющих условиям А и Б, то дерево t2 останется таким же, какое использовалось при определении условий шага 2. Зная дерево Ь, можно отсортировать все h потомков, что займет не более чем O(nlogn) времени, но позволит за 0(1) отыскивать следующее незанумерованное дерево (необходимое на шагах 2 и 4). Получается такая оценка сложности:

( н \

О

nlogn + I nilog п

у і=1

< O(nlogn + logn( I п)) = O(nlogn),

1/=1,к^1/Ф/

что и требовалось доказать.

б

а

в

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

1. Adolphson D., Hu T.C. Optimal linear ordering // SIAM J. Appl. Math. 1973. V. 25. № 3. P. 403-423.

2. Иорданский М.А. Оптимальные нумерации вершин графов // Математические вопросы кибернетики. Вып. 10. М.: Наука, 2001. С. 83-102.

3. Shiloach Y.A. A minimal linear arrangement algorithm for undirected trees // SIAM J. Comput. 1979. V. 8. № 1. P. 15-32.

4. Шейдвассер М.А. О длине и ширине размещений графов в решетках // Проблемы кибернетики. Вып. 29. М.: Наука, 1974. С. 63-102.

MINIMAL ENUMERATIONS OF ROOTED DIRECTED TREES WITH AN ACCENTUATED VERTEX

D.S. Shelukhin

The vertex enumeration problem is considered of a single-rooted directed tree to minimize the sum of the accentuated vertex number and the average distance between the numbers of all pairs of adjacent vertices. An algorithm of the problem solution with complexity O(nlogn) is presented.

Keywords: enumeration, single-rooted directed tree.

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