Алгоритм Нахождения Наименее Мощного Покрытия Конечного Множества Его Подмножествами

Разбирая старые бумаги, я наткнулся на изрядно потрепанный блокнот, в котором нашел наброски алгоритма поиска покрытия.

Автор алгоритма Щербанов Виктор Анатольевич — мой учитель, под руководством которого я работал в девяностые годы прошлого века.

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

Что, в общем-то, не помешало Шефу (как мы его между собой называли) довести работу над алгоритмом до логического завершения.

Где-то в 2000-х алгоритм был опубликован в одном из институтских изданий в Томске.

Но думаю, не помешало бы вспомнить об этом еще раз.

Собственно, в память о Шефе я и решил написать этот пост. Возможно, кому-то алгоритм покажется интересным или подскажет новые идеи реализации алгоритма.

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

Для начала давайте определимся, что мы на самом деле ищем.

Пусть дано конечное множество

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

и семья

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

его подмножества

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Найти подсемейство

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

(если он существует) такой, что

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

и мощность подсемейства S* (охватывающего множество V) наименьшая из всех возможных.

Следующие утверждения определяют концепции минимального и наименьшего покрытия.

Утверждение 1. Для того, чтобы подсемейство

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, было обложкой сета

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, необходимо и достаточно, чтобы условие выполнялось

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

Покрытие S' называется минимальным, если не существует покрытия S'' такого, что

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Покрытие S* называется минимальным, если для любого минимального покрытия S' выполнено следующее условие:

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

Утверждение 2. Покрытие

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

минимальным тогда и только тогда, когда для любого

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, условие выполнено

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами




И самое важное.

Пусть дано конечное множество

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

и семья

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

его подмножества

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Построим полный загруженный граф

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, в котором много

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

семейство вершин графа отображается взаимно однозначно

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

подмножества

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, и к каждому ребру

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

- подмножество

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Обозначим

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

множество всех ребер, инцидентных вершине

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, А

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

— множество всех вершин, инцидентных ребрам из множества

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Теорема 1. Подмножество минимальной мощности

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

ребра, инцидентные произвольной вершине

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

в столбце G при соблюдении условий

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

определяет минимальное покрытие

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, однозначно соответствующий множеству

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

вершины, если

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

или многие

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

вершины, если

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Теорема 2. Подмножество минимальной мощности

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

ребра, инцидентные произвольной вершине

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

ребра

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

в столбце G при соблюдении условий

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

для всех

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

определяет наименьшее покрытие

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, однозначно соответствующий множеству

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

вершины, если

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

или многие

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

вершины, если

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.




На основе теорем предлагается следующий алгоритм поиска наименьшего покрытия.

1. Для многих

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

и семья

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

его подмножества

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, сравните семью

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

подмножества

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Если для некоторых

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

оказывается

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, то существует тривиальное накрытие

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Конец алгоритма.

В противном случае перейдите к шагу 2. 2. Построить полный загруженный граф

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, Где

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Вершина

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

нагружать много

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

Край

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

нагружать много

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

3. Проверить существование покрытия: для произвольной вершины

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

определить подмножество

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, Где

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

— множество ребер, инцидентных вершине

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

в столбце

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Если

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, то покрытия нет. Конец алгоритма.

Если

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, то покрытие существует. Переходим к процедуре поиска наименьшего покрытия (шаг 4).

4. Установите t:=0. 5. В полностью загруженном графе

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

найти край

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

для которого условие выполнено

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Если

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

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

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

(пункт 7).

6. Построить полный загруженный граф

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, предполагая

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

,

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

— множество ребер, инцидентных вершине

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

в столбце

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Помещать

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

для всех

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Установите t:=t+1 и перейдите к шагу 5. 7. Начало построения множества D вершин, определяющих наименьшее покрытие.



Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Помещать

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

8. Если t=0, то переходим к шагу 11, иначе ставим t:=t-1. 9. В колонке

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

определить подмножество

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

10. Если в столбце

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

условие выполнено

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, затем поставь

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

, иначе - Д:=Д.

Перейдите к шагу 8. 11. Семья

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

подмножества

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

определяет наименьшую обложку набора

Алгоритм нахождения наименее мощного покрытия конечного множества его подмножествами

.

Конец алгоритма.




Попробуем оценить сложность алгоритма.

Вся, так сказать, суть алгоритма (с точки зрения оценки сложности) заключена во фразе «построить полный нагруженный граф».

Нам нужно выполнить n действий для расчета нагрузки на n вершин графа и (n-1)n/2 вычислений (в зависимости от количества ребер полного графа) для загрузки ребер графа.

И все это, если рассматривать худший случай, когда подмножества не пересекаются друг с другом, выполняется n-2 раза.

Таким образом, грубая оценка равна O(n) = n 3 + н 2 .

В заключение.

Не уверен, что пост заслуживает инвайта, поскольку моя причастность к алгоритму более чем сомнительна.

Но мне кажется, что стоит опубликовать.

Надеюсь модераторы разберутся.

Что там говорили греки? - Fais se que dois adviegne que peut (делай то, что должен, и будь что будет).

(или это были римляне?) Теги: #множества #покрытие #граф #Алгоритмы

Вместе с данным постом часто просматривают: