Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дискретка_Экзамен_Ответы / отн / 3 транзитивное замыкание

.docx
Скачиваний:
71
Добавлен:
11.03.2015
Размер:
21.5 Кб
Скачать

3.6. Замыкание отношений

Пусть A и С – отношения на множестве М. Тогда отношение C называется замыканием отношения A относительно свойства S, если оно является пересечением всех отношений, обладающих свойством S и содержащих A в качестве подмножества, т.е. С - это отношение, наименьшее по мощности из всех отношений, обладающих свойством S и содержащих A в качестве подмножества.

Для того, чтобы получить замыкание отношения А относительно свойства S, в него нужно добавить минимально возможное количество пар, после чего полученное отношение будет обладать свойством S.

Транзитивное замыкание отношения A можно получить объединением всех положительных степеней отношения A от 1 до N-1, где N – мощность множества М, на котором построено отношение A.

Алгоритм 3.10 (рис.3.15) вычисления транзитивного замыкания отношения А.

Вход: А - двумерный массив, хранящий матрицу отношения А на множестве М;

N - мощность множества М.

Выход: С - двумерный массив, хранящий матрицу транзитивного замыкания отношения А.

Рис.3.15. Блок-схема алгоритма вычисления транзитивного замыкания

Существует наглядная интерпретация понятия транзитивного замыкания в терминах представления отношения в виде графа. Пусть дан граф, представляющий отношение А. Пара (a,b) принадлежит транзитивному замыканию отношения А тогда и только тогда, когда в графе

отношения А есть цепочка дуг, ведущая из вершины a в вершину b.

Для того, чтобы построить граф отношения С, являющимся транзитивным замыканием отношения А, изготовим копию графа отношения А. Затем будем отыскивать такие тройки вершин a, b и c, для которых в графе есть дуги из a в b и из b в c. Для каждой такой тройки добавим в граф дугу из a в c, если такой дуги ещё нет. Когда таким способом уже нельзя добавить новых дуг, каждые две вершины, соединённые цепочкой дуг, оказываются соединёнными одной дугой. Следовательно, построение закончено и граф транзитивного замыкания отношения А получен.

Для того чтобы систематизировать процесс добавления дуг, будем последовательно рассматривать все вершины графа с первой до последней. Для каждого пути длины два, проходящего через рассматриваемую вершину, проведём дугу из начальной вершины этого пути в его конечную вершину. Граф транзитивного замыкания отношения А будет построен после однократного исследования всех вершин графа. Повторное исследование вершин не может добавить новых дуг (доказано Уоршаллом в 1962 году).

Рассмотрим пример.

Отношение А задано графом на рис.3.16.

1

2

5

4

3

Рис.3.16. Граф отношения A

Анализируя вершину 1 видим дуги из 5 в 1 и из 1 в 2, образующие путь длины два и проходящий через вершину 1, поэтому добавляем дугу из 5 в 2 (рис.3.17,а). В вершину 2 теперь входят три дуги из 1, 4 и 5, а выходит одна дуга в вершину 3, поэтому добавляем дуги из 1 в 3, из 4 в 3, а дуга из 5 в 3 уже есть (рис.3.17,б). Из третьей вершины дуги не выходят, поэтому ничего не добавляем. Из четвёртой вершины ребро идёт в неё же и выходит во вторую, в этом случае новые дуги не добавляются. В пятую вершину дуги не входят, поэтому новые дуги не вводим. Т.о. исследованы все вершины графа, добавлены все необходимые дуги и граф (рис.3.17,б) транзитивного замыкания отношения А получен.

1

1

2

5

2

5

4

4

3

3

а) б)

Рис.3.17. Формирование транзитивного замыкания отношения А

Алгоритм 3.11 (рис.3.18) вычисления транзитивного замыкания отношения А основан на рассмотренном выше принципе (алгоритм Уоршалла).

Вход: А - двумерный массив, хранящий матрицу отношения А на множестве М;

N - мощность множества М.

Выход: С - двумерный массив, хранящий матрицу транзитивного замыкания отношения А.

Транзитивное замыкание

C := A

z:=1,N

x:=1, N

y:=1, N

Cx,y:=Cx,y or Cx,z and Cz,y

Конец

Рис.3.18. Блок-схема алгоритма вычисления транзитивного замыкания