Научная статья на тему 'Основные операции над N-ориентированными гиперграфами в реляционной базе данных'

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

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

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

Y = HT C"1 [Z - M {zJZ i- 1}] +

+H+ M{ZJZ"1}.

Таким образом, модель (15) может быть запи

(20)

сана в виде

л^ =^нтс-1 (г,-м^/г1"1}^н+м{z1/z1"1}Jт). (21)

Матрица коэффициентов P, найденная из условия минимума среднеквадратичного отклонения

\¥ от W, имеет вид

р = [нтс-1к, (с-1 )т н - нтс-1е г1-18т -

-80^г1-1 (с-1 )Тн+]-1 х (22) х[нтС-1К - 80 1,], где 8 = нтС-1-Н+.

I г 1№1 г1№1г I

Положим, как и выше, математические ожидания Zi и Wi равными нулю. Тогда К. будет являться автокорреляционной матрицей векторного процесса Zi; - взаимной корреляционной

матрицей векторных процессов Zi и Wi; 0 1-1 со-

стоит из множества дисперсионных функций векторного процесса Zi относительно Zi-1; 0^ ^ -

из множественных обобщенных дисперсионных функций векторных процессов Zi и Wi относительно Zi-1; 0' - из множественных дисперси-

zlz

онных функций векторных процессов Zi и Zi-1.

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

Литература

1. Дисперсионная идентификация; [под ред. Н.С. Райб-мана]. М.: Наука, 1981.

2. Дубров А.М., Мхитарян В.С., Трошин Л.И. Многомерные статистические методы. М.: Финансы и статистика, 2000.

3. Казаков И.Е. Статистическая теория систем управления в пространстве состояний. М.: Наука, 1975.

4. Дургарян И.С., Пащенко Ф.Ф. Метод двухступенчатой идентификации в задаче оценки экономической эффективности АСУ // Автоматика и телемеханика. 1977. № 5.

5. Функциональный анализ; [под ред. С.Г. Крейна]. М.: Наука, 1972.

УДК 004.4

ОСНОВНЫЕ ОПЕРАЦИИ НАД СОРИЕНТИРОВАННЫМИ ГИПЕРГРАФАМИ В РЕЛЯЦИОННОЙ БАЗЕ ДАННЫХ

(Работа выполнена в рамках ФЦП «Научные и научно-педагогические кадры инновационной России» на 2009-2013 гг., направление «Информатика», проект НК-421 (2))

В.Г. Мокрозуб, к.т.н.

(Тамбовский государственный технический университет, [email protected], [email protected])

Введено понятие Сориентированного гиперграфа. Описаны операции добавления и удаления вершин и ребер в К-ориентированных гиперграфах, представленных в реляционной базе данных.

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

Гиперграфы применяются в автоматизированных системах для процедур анализа и синтеза технических объектов. В работе [1] подробно описаны методы декомпозиции гиперграфовых структур, в [2] - операции над ультра- и гиперграфами, представленными в аналитическом виде. Данные публикации описывают операции над гиперграфами, не привязываясь к программным продуктам, в среде которых предполагается реализация автоматизированной системы. Между тем выбранная программная среда оказывает большое влияние на последовательность действий при выполнении операций над гиперграфами.

Целью настоящей работы является представление ^-ориентированных гиперграфов и операций добавления и удаления вершин и ребер в ре-

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

Определение ориентированного гиперграфа

Обозначим ориентированный гиперграф Ggo(X, Ц), где X={xi}, 1 = 1,1 - множество вершин гиперграфа, xi - 1-я вершина; Ц={ит(Х1т)}, т = 1,М - множество ребер гиперграфа, ит(Х1т) - т-е ребро гиперграфа, Х1т - множество вершин, инцидентных т-му ребру Х1тсХ, Х1т = {хк}, V кеКт, Кт с 1,1, 1 - номер верши-

ны в ребре ориентированного гиперграфа, 1 = 1,Ьт, Lm - число вершин в ребре m. При этом будем считать, что наборы вершин {хь x2, x3} и {x2, x1, x3} разные.

Пример ориентированного гиперграфа представлен на рисунке 1.

Запись 41 на рисунке означает, что номер вер-

шины x5 в ребре и4 один. Для пояснения рисунка в таблице приведены наборы вершин, инцидентных ребрам.

Ребро гиперграфа Вершины, инцидентные ребру

Ul X11={x1, x4, x2, x3 }

U2 X12={XS, x1}

U3 X13={x1, xs}

U4 X14={xS, x6}

Определение Сориентированного гиперграфа

По аналогии с ориентированным гиперграфом обозначим ^-ориентированный гиперграф Ggon(X, Ц), где X={xi}, 1 = 1,1 - множество вершин гиперграфа, xi - 1-я вершина; Ц={ит(Х1т)}, т = 1,М -множество ребер гиперграфа, ит(Х1т) - т-е ребро гиперграфа, Х1т - множество вершин, инцидентных т-му ребру Х1тсХ, Х1т = {х^}, V кеКт,

Кт с 1,1; Ь - номер вершины в ребре ориентированного гиперграфа представляет собой вектор, Ь = {1п}, п = 1,^ мощность которого N. В общем

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

Для простоты координаты (свойства) вершин обозначим номерами от 1 до N. Значение свойства

п, п е , вершины х1, х1еХ, в ребре ит, итеЦ, обозначим з[п, 1, т]. С учетом сказанного множество вершин, инцидентных т-му ребру Х1тсХ, с множеством значений свойств каждой вершины в ребре обозначим Х1т={хк, 8к}, где VkеKm, К, С 1,1, 8к={«[п, к, т]} - множество значений

свойств к-й вершины в т-м ребре, п = 1,N.

По аналогии со схемой данных ориентированного гиперграфа [3] представим схему данных ^-ориентированного гиперграфа (рис. 2).

X G

1 ID_G

ID_X FKG X да

ID__X

Наименование вершины FK_G_U да

ID U

U 1 NPP_1

ID_U NPP_2

Наименование ребра

NPP_N

Рис. 2

Примем, что значения полей первичного ключа ID_U, ID_X, ID_G определяются автоматически (например, свойство IDENTITY в Transact-SQL или счетчик в MS-Access). Будем также считать, что наименования вершины в таблице X и ребра в таблице U уникальны; FK_G_X, FK_G_U -внешние индексы, которые связывают таблицы G и X, G и U.

Поля NPP_1, NPP_2, ... NPP_N таблицы G представляют собой координаты (или свойства) вершины ID_X в ребре ID_U. Число координат определяется прикладной задачей. Максимальное число координат N определяется ограничениями выбранной СУБД. Так, например, для СУБД MS-SQL Server 2005 максимальное число столбцов в таблице - 1024, этого достаточно для решения практических задач по проектированию технологического оборудования и управления предприятиями химического и машиностроительного профилей.

Операции над N-ориентированными гиперграфами

Добавление новой вершины выполняется в два этапа:

1) добавление вершины во множество вершин, X={xi}, i = Ц;

2) добавление вершины во множество инцидентных ей ребер, U1cU, где U1 - множество ребер, которым инцидентна добавляемая вершина.

При добавлении вершины в существующие ребра возможны следующие ситуации:

- координаты вершин, входящих в ребро, изменяются; например, координата «порядковый номер вершины» изменяется у всех существующих вершин (увеличивается на единицу) при добавлении новой вершины с порядковым номером один;

- координаты существующих вершин не изменяются.

Введем следующие обозначения: xt - добавляемая вершина; U1={um1(X1m1)}, V m1eM1, Ml с 1,M - множество ребер гиперграфа, которым инцидентна вершина xt; X1m1={xk, Sk} - множество вершин и свойств вершин ребер, инцидентных добавляемой вершине; Sk={s[n, k, m1]},

n = 1,N, V keKm1, Km1 с 1,1. Вершина xt добавляется в каждое ребро со своим набором координат (свойств), которые обозначим как S1t={s[n, t, m1]}, n = 1N.

Для представления операции добавления новой вершины в среде Transact-SQL введем таблицу свойств добавляемой вершины S1=(ID_S1, ID_U, NPP_1, NPP_2, ..., NPP_N}, где ID_S1 - поле первичного ключа; ID_U - поле первичного ключа ребер, инцидентных добавляемой вершине; NPP_1, NPP_2, ..., NPP_N - значения свойств добавляемой вершины в ребре ID_U. Наименование добавляемой вершины обозначим переменной @Наименование_вершины; значение поля первичного ключа - @ID_X.

С учетом введенных обозначений последовательность действий и реализация этих действий в среде Transact-SQL при добавлении новой вершины в ребро следующие.

1) Если xtgX, то добавление xt в X:

if not exists (select * from X where

Наименование_вершины=@Наименование_верши-...... begin

insert X уа1иеБ(@Наименование_вершины) select @ID_X=@@Identity end

2) Добавление вершины xt в каждое ребро множества ребер U1={um1(X1m1)} со своим набором свойств S1t={s[n, t, m1]}, m1e Ml, Ml с 1,M, n = 1,N, то есть в результате получаем

U={Um(X2m)}, X2m=Xm2u(Xm1nxt), V m2eM\M1, V m1eM1, где m1, m2 - индексы ребер, инцидентных и не инцидентных вершине xt. Insert G (ID_X, ID_U, NPP_1, NPP_2,..., NPP_N)

(select @ID_X, ID_U, NPP_1, NPP_2,..., NPP_N from S1)

3) Корректировка свойств Sk вершин множества ребер U1={um1(Y1m1)} в зависимости от свойств вершины xt. Этот пункт полностью определяется характером решаемой задачи. Для примера обозначим функцию, позволяющую получить новое значение свойства NPP вершины ID_X в ребре ID_U как dbo.F_NPP(NPP, ID_X, ID_U). Тогда корректировку свойств вершин можно записать следующим образом.

Sk={s[n, k, m]=f_npp(n, k, m)},

n = 1,N, keKm1, Km1 e 1,1, VmeM1, M1cM,

где f_npp(n, k, m) - функция, позволяющая найти новое значение свойства n вершины k в ребре m. Update G set NPP_1=dbo.F_NPP('NPP_1', G. ID_X, S1.ID_U), NPP_2=dbo.F_NPP('NPP_2', G. ID_X, S1.ID_U),

NPP_N=dbo.F_NPP('NPP_N', G.ID_X, S1.ID_U) from S1 where G.ID_U=S1.ID_U and G.ID_X< >@ID_X При добавлении нового ребра возможны два основных случая:

- новое ребро содержит только существующие вершины;

- новое ребро содержит новые вершины. Введем обозначения: ut - добавляемое ребро;

S1t={sk, Sk}, Vk e 1,1 и Kn - множество вершин

ребра с их свойствами; Sk={s[n, k, t]}, n = 1,N -множество свойств k-й вершины в ребре ut; Kn -множество индексов новых вершин в добавляемом

ребре Kn n 1,1 = 0.

Для представления операции добавления в Transact-SQL введем таблицу вершин добавляемого ребра X1=(ID_X1, ID_X, Наименование_вер-шины). В таблице X1 поле ID_X имеет значение NULL, если вершина новая (не содержится в таблице Х). Введем таблицу свойств добавляемого ребра U1=(ID_U1, ID_X, NPP_1, NPP_2, ..., NPP_N), где ID_U1 - поле первичного ключа; ID_X - поле первичного ключа вершины, инцидентной добавляемому ребру; NPP_1, NPP_2, ..., NPP_N - значения свойств вершин в добавляемом ребре. Обозначим наименование нового ребра как @Наименование_ребра.

С учетом введенных обозначений последовательность действий и реализация этих действий в среде Transact-SQL при добавлении нового ребра следующие.

1) Добавление во множество X новых вершин, если они есть в добавляемом ребре, результат -множество X2.

Если Kn^0, то X2=Xu{xk}, VkeKn.

Insert X (Наименование_вершины) (select Наименова-ние_вершины

from X1 where not exists(select * from X where

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

Х.Наименование_вершины=Х1.Наименование_вер-

шины))

2) Формирование множества вершин и свойств вершин добавляемого ребра X1t={xk, Sk}, xkeX2.

Insert U1 (ID_X) (select X.ID_X from X,X1 where

Х.Наименование_вершины=Х1.Наименова-ние_вершины) Exec INPUT_U1_NPP, где INPUT_U1_NPP - процедура, позволяющая ввести значения свойств вершин добавляемого ребра.

3) Добавление ребра ut, результат - множество U2=Uuut.

Insert U values(@Наименование_ребра) set @ID_U=@@Identity Insert G (ID_X,ID_U, NPP_1, NPP_2,..., NPP_N)

(select ID_X, @ID_U, NPP_1, NPP_2,.., NPP_N from U1)

Удаление вершины. В [1] предлагается называть слабым удалением удаление вершины из реб-

ра с сохранением ребер, сильным удалением - удаление вершин вместе с инцидентными ребрами.

Рассмотрим следующие типовые операции удаления вершины:

- из определенного ребра с сохранением ребра - простое удаление вершины;

- из ребра вместе с ребром (равнозначно удалению ребра, инцидентного вершине) - составное удаление;

- из всех ребер с сохранением ребер - слабое удаление;

- из всех ребер вместе с ребрами (равнозначно удалению ребер, инцидентных вершине) -сильное удаление.

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

Введем обозначения: xt, t е 1,I - удаляемая вершина; uz, z е 1,M - ребро, из которого удаляется вершина; X1j, X1z - множество вершин, инцидентных j-му и z-му ребрам; U2 - множество ребер после удаления; Ggon(X\xt, U2) - получаемый гиперграф при удалении вершины из множества X; Ggon(X, U2) - получаемый гиперграф без удаления вершины из множества X; U2 - множество ребер гиперграфа, получаемое после удаления вершины xt.

Как и в случае с добавлением вершины, корректировка свойств Sz вершин ребра uz(X1z) в зависимости от свойств вершины xt полностью определяется характером решаемой задачи.

Обозначим функцию, позволяющую получить новое значение свойства NPP вершины ID_X в ребре ID_U, как dbo.F_NPP(NPP, ID_X, ID_U); @Наименование_вершины - наименование удаляемой вершины; @Наименование_ребра - наименование ребра, из которого удаляется вершина.

Простое удаление вершины - удаление вершины из определенного ребра с сохранением ребра: U2={Uj(X1j)uUz(X1z\xt)}, VjeKj, Kj = 1M\z.

delete from G where ID_X=(select ID_X from X where Наиме-нование_вершины=@Наименование_вершины) and ID_U= =(select ID_U from U where Наименование_ребра=@Наиме-нование_ребра)

Корректировку свойств вершин можно записать следующим образом: Sk={s[n, k, z]=f_npp(n, k, z)}, n = 1,N, VkeKm1, Km1 e 1,I, где f_npp(n, k, z) - функция, позволяющая найти новое значение свойства n вершины k в ребре z. В нотации Transact-SQL корректировка будет записана как Update G set NPP_1=dbo.F_NPP( 'NPP_1', ID_X , S1.ID_U), NPP_2=dbo.F_NPP( 'NPP_2', ID_X , S1.ID_U),

NPP_N=dbo.F_NPP( 'NPP_N', ID_X, S1.ID_U) from G where G.ID_U= (select top 1 ID_U from U where

Наименование_ребра=@Наименование_ребра)

Составное удаление вершины - удаление вершины из ребра вместе с ребром можно записать как U2={uj(X1j)}, VkeKj, Kj = 1M\z, в нотации Transact-SQL как

delete from G where ID_U=(select ID_U from U where

Наименование_ребра=@Наименование_ребра)

Так как ребро удаляется, корректировку свойств его вершин проводить не надо.

Слабое удаление вершины - удаление вершины из всех ребер с сохранением ребер можно записать как U2={Uj(X1j)uur(X1r\xt)}, V jeKj, V re eKr, K £ 1M, Kr с 1M, где Kr=M\Kj, где Kj -

множество индексов ребер, не инцидентных вершине xt; Kr - множество индексов ребер, инцидентных вершине xt.

В нотации Transact-SQL слабое удаление вершины запишется как

delete from G where ID_X=(select ID_X from X where

Наименование_вершины=@Наименование_вершины)

Удаление вершины из множества X, то есть Ggon(X\xt, U2), можно записать в виде

delete from X where Наименование_вершины = @Наимено-вание_вершины

Если при этом внешний ключ FR_G_X описать как alter table G add constraint FK_G_X foreign key (ID_X) references X(ID_X) on delete cascade, то удаление вершины из всех ребер будет сделано при удалении вершины из множества X.

Корректировку свойств вершин можно записать следующим образом:

Sk={s[n, k, m]=f_npp(n, k, m)}, n = 1,N, VkeKm1, Km1 e 1j, VmeKr, KcM

select @ID_X=ID_X from X where

Наименование_вершины=@Наименование_вершины Update G set NPP_1=dbo.F_NPP( 'NPP_1', ID_X , ID_U),

NPP_2=dbo.F_NPP( 'NPP_2', ID_X , ID_U), ... , NPP_N=dbo.F_NPP( 'NPP_N', ID_X, ID_U) from G where G.ID_U in (select ID_U from G where ID_X=@ID_X) Сильное удаление вершины - удаление вершины из всех ребер вместе с ребрами: U2= ={uj(X1j)}, VjeKj, VreKr, Kj с 1M\Kr,

K С 1,M, где Kj - множество индексов ребер, не

инцидентных вершине xt; Kr - множество индексов ребер, инцидентных вершине xt. select @ID_X=ID_X from X where

Наименование_вершины=@Наименование_вершины delete from G where ID_U in (select ID_U from G where ID_X=@ID_X)

Так как ребра удаляются, корректировку свойств их вершин проводить не надо.

Удаление ребра. По аналогии с удалением вершины будем различать следующие операции удаления ребер:

- простое - удаление ребра из множества

Ggon;

- составное - удаление ребра из множества Ggon и удаление всех вершин удаляемого ребра из других ребер;

- жесткое - удаление ребра из множества Ggon и удаление всех ребер, в которые входят вершины удаляемого ребра.

При этом возможны как сохранение, так и удаление ребра и соответствующих вершин из множеств U и X.

Введем обозначения: ut - удаляемое ребро, t e 1,M; X1t - множество вершин ребра ut; U2, X2, G2gon(X2, U2) - множество ребер, вершин и граф, соответственно, получаемых после удаления ребра ut.

Простое удаление ребра - удаление ребра из множества Ggon: G2gon(X2, U\ut); U2=U\ut - при удалении ut из множества U или U2=U - при сохранении; X2=X - при сохранении вершин удаляемого ребра в множестве X или X2=X\X1t - при удалении вершин ребра ut из множества X.

При удалении вершин удаляемого ребра из множества X для обеспечения целостности БД также необходимо удалить эти вершины из всех ребер, в которые они входят, то есть U2={uj(X1j\X3j)}, где X3j=X1jnX1t, Xj0, Vj e 1,M. В этом случае следует провести корректировку свойств оставшихся вершин. Обозначим через Kt множество индексов вершин удаляемого ребра. Тогда корректировку свойств оставшихся вершин можно записать следующим образом:

Sk={s[n, k, j]=f_npp(n, k, j)}, n = 1,N,

Vk e 1Д \ Kt, Vj e 1,M, Xj0, X3j=X1jnX1t.

Пусть X3=(ID_X3, ID_X, NPP_1, ..., NPP_N)

- таблица, содержащая ID_X вершин и свойства вершин удаляемого ребра; @ID_U - ID_U удаляемого ребра.

select @ID_U=ID_U from U where

Наименование_ребра=@Наименование_ребра /* Запоминание множества вершин удаляемого ребра */

select ID_X, NPP_1, ..., NPP_N into X3 from G where ID_U=@ID_U

/* Удаление ребра */

delete from G whеre ID_U=@ID_U

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

/* Корректировка свойств вершин */ update G set NPP_1=dbo.F_NPP( 'NPP_1', ID_X , ID_U) ,

NPP_2=dbo.F_NPP( 'NPP_1', ID_X , ID_U) , ... , NPP_N=dbo.F_NPP( 'NPP_N', ID_X, ID_U)

from G, X3 where ID_U= (select ID_U from G where ID_X in (Select ID_X from X3)) and ID_U< >@ID_U delete from X where ID_X in (select ID_X from X3)

Если внешний ключ FR_G_X описать как alter

table G add constraint FK_G_X foreign key (ID_X) references

X(ID_X) on delete cascade, TO удаление вершин ИЗ всех ребер будет сделано при удалении вершины из множества X, в противном случае можно воспользоваться оператором

delete from G where ID_U< >@ID_U and ID_X in (select ID_X from X3)

Составное удаление ребра - удаление ребра и удаление всех вершин удаляемого ребра из других ребер. Составное удаление ребра - это простое удаление с удалением вершин ребра из множества X, которое описано выше.

Жесткое удаление ребра - удаление ребра и удаление всех ребер, в которые входят вершины удаляемого ребра, сводится к получению гиперграфа G2gon(X2, U\U3), где X2=X при сохранении вершин удаляемого ребра в множестве X или X2=X\X1t при удалении вершин ребра ut из множества X; U3 - множество ребер, в которые входят вершины удаляемого ребра, U3={Uj(X1j)}, X1jO nX1t^0, Vje 1,M. Так как ребра, содержащие вершины удаляемого ребра, удаляются, проводить корректировку свойств их вершин не надо.

Пусть X3=(ID_X3, ID_X) - таблица, содержащая ID_X вершин удаляемого ребра; @ID_U -ID_U удаляемого ребра, тогда жесткое удаление ребра можно записать как

select @ID_U=ID_U from U where

Наименование_ребра=@Наименование_ребра select distinct ID_X into X3 from G where ID_U=@ID_U delete from G where ID_U in (select ID_U from G where ID_X in (select ID_X from X3))

На основании изложенного можно сделать следующее заключение. В работе введено понятие ^-ориентированного гиперграфа и описаны основные операции над такими гиперграфами, представленными в реляционной БД. Эти операции имеют как теоретико-множественное описание, так и описание на языке Transact-SQL. Ж-ориенти-рованные гиперграфы и операции над ними использовались для описания структуры технических объектов и создания программных шаблонов, предназначенных для разработки систем автоматизированного управления [4] и проектирования технологического оборудования [5].

Литература

1. Батищев Д.И., Старостин Н.В., Филимонов А.В. Многоуровневая декомпозиция гиперграфовых структур // Приложение к журналу «Информационные технологии». 2008. № 5. 34 с.

2. Овчинников В.А. Операции над ультра- и гиперграфами для реализации процедур анализа и синтеза структур сложных систем // Наука и образование. 2009. № 10. URL: http://te-chnomag.edu.ru/doc/132769.html (дата обращения: 11.02.2010).

3. Мокрозуб В.Г. [и др.]. Применение гиперграфов и реляционной базы данных для описания структуры радиотехнических систем // Успехи современной радиоэлектроники. 2009. № 11. С. 37-41.

4. Мокрозуб В.Г., Егоров С.Я., Немтинов В.А. Процедурные и информационно-логические модели планирования выпуска продукции и ремонтов технологического оборудования многоассортиментных производств // Информационные технологии в проектировании и производстве. 2009. № 2. С. 72-76.

5. Мокрозуб В.Г., Мариковская М.П., Красильников В.Е. Интеллектуальная автоматизированная система проектирова-

ния химического оборудования // Системы управления и информационные технологии. 2007. № 4.2(30). С. 264-267.

УДК 519.179.1+004.021

АЛГОРИТМ ПОСТРОЕНИЯ ДЕРЕВА ДЕКОМПОЗИЦИИ ГИПЕРГРАФА НА ОСНОВЕ АЦИКЛИЧНОСТИ

В.В. Быкова, к.т.н.

(Институт математики Сибирского федерального университета, г. Красноярск,

[email protected])

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

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

Структура многих ЖР-трудных задач комбинаторной оптимизации может быть описана гиперграфом. Такие задачи возникают в системах принятия решений, БД, при анализе информационных и коммуникационных сетей, конструкторском проектировании радиоэлектронной и вычислительной аппаратуры, лингвистической трансляции, при формировании трафика компьютерных сетей и т.д. Дерево декомпозиции гиперграфа дает возможность организовать процесс поиска оптимального решения по принципу «разделяй и властвуй». Если древовидная ширина гиперграфа ограничена сверху некоторой константой, то многие ЖР-трудные задачи комбинаторной оптимизации могут быть решены за полиномиальное время [1]. Древовидная ширина - это числовая характеристика гиперграфа, определяемая через оптимальное дерево декомпозиции. К сожалению, сама задача нахождения оптимального дерева декомпозиции также ЖР-трудная, поэтому в алгоритмической практике востребованы эвристики, позволяющие получать хорошие деревья декомпозиции за разумное время.

В данной работе предлагается эвристический алгоритм CTDA (Computing Tree Decomposition by Acyclicity), основанный на пополнении гиперграфа до М-ациклического. Свойство М-ацикличности (называемое также а-ацикличностью) широко эксплуатируется в различных приложениях теории гиперграфов, так как обеспечивает полиномиальную вычислимость ряда важных характеристик и графических конструкций, связанных с гиперграфами [2-4]. Употребление данного свойства в алгоритме CTDA дает возможность создавать за полиномиальное время дерево декомпозиции гиперграфа с разной степенью приближения к оптимальному дереву декомпозиции.

Гиперграф и дерево декомпозиции. Используем терминологию и обозначения, принятые в

[3-5]. Пусть задан гиперграф Н=(Х, Ц) с конечным множеством вершин X и ребер Ц. В общем случае Ц - конечное семейство произвольных подмножеств множества X. Гиперграф Н=(0, 0) считается пустым. Пусть Ц(х) - множество ребер, инцидентных в Н вершине хеХ; Х(и) - множество всех вершин, инцидентных в Н ребру иеЦ. Число I Ц(х) | определяет степень вершины х, а | Х(и) | -степень ребра и. Элемент гиперграфа степени 0 считают голым, степени 1 - висячим. Два ребра и, уеЦ кратны в Н, если Х(и)=Х(у). Ребро и вложено в ребро V, когда Х(и)сХ(у). Гиперграф называется минимальным, если он не содержит голых элементов, вложенных и кратных ребер. Ранг гиперграфа Н=(Х, Ц) определяется как максимальная степень его ребра: г(Н)=тахиеЦ | Х(и) |.

Существуют различные способы задания гиперграфа. Так, если Х={х19 х2, ..., хп}, п>1, и Ц={и19 и2, ..., ит}, т>1, то (п, т)-гиперграф Н=(Х, Ц) однозначно описывается матрицей инциденций А(Н)={ау}, где а^=1 при х^Х^) и а^=0 при х^Х(и^, 1=1, 2, ..., п, ]=1, 2, ..., т. Универсальным способом задания гиперграфа также является ке-нигово представление. Кенигово представление гиперграфа Н=(Х, Ц) - это обыкновенный двудольный граф К(Н), отражающий отношение инцидентности различных элементов гиперграфа, с множеством вершин ХиЦ и долями Х, Ц. Многие структурные свойства гиперграфа определяются через одноименные свойства кенигова представления. Так, гиперграф Н считается связным, если граф К(Н) связный. Далее в качестве исходных гиперграфов будем рассматривать, не нарушая общности, только непустые, минимальные и связные гиперграфы.

Частично структурные особенности гиперграфа Н=(Х, Ц) описывают ассоциированные с ним обыкновенные графы Ь(2)(Н) и Ь(Н). Граф Ь(2)(Н)

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