русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Задача о покрытии множествами


Дата добавления: 2015-01-16; просмотров: 2422; Нарушение авторских прав


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

Постановка задачи следующая: X – конечное множество, Á - семейство его подмножеств, и каждый элемент X принадлежит хотя бы одному из SÎÁ. Ищем минимальное число подмножеств из Á, покрывающих Á. Пусть Â такое семейство. Пример задачи о покрытии на рис.37.3.

 

Рис.37.3.

Опишем решающий задачу жадный алгоритм. Идея такого алгоритма:

в каждый момент мы выбираем множество, покрывающее максимальное число еще не покрытых элементов.

Greedy-Set-Cover(X,Á)

1. U X

2. Æ

3. while U ¹ Æ

4. do выбираем S ÎÁ с наибольшим çSÇU÷

5. U U \ S

6. Â ÂÈ{S}

7. returnÂ

В каждый момент работы алгоритма множество U содержит еще не покрытые элементы, а семейство Â - уже включенные в покрытие подмножества. Когда U = Æ, Â становится покрытием множества X.

Легко видеть, что алгоритм полиномиален: количество повторений цикла не превосходит min(çXô,çÁô), а каждое повторение реализовывается за O(çXô,çÁô) операций.

Теорема. Размер покрытия, возвращаемого алгоритмом Greedy-Set-Cover(X,Á) превосходит минимальное покрытие не более чем в

H(max {çSï: S ÎÁ}) раз.

Доказательство. Жадный алгоритм отбирает на каждом шаге то подмножество из Á, которое покрывает больше всего непокрытых элементов X. Представим себе, что на каждом шаге имеется один доллар, который распределяется между всеми вновь покрытыми элементами. Каждый элемент получает деньги только один раз и получит тем больше, чем меньше новых элементов покрывается на том же шаге. Элемент x, попадающий впервые на i-ом шаге в множество Si , получит cx = 1/ çSi \ (S1ÈS2È…ÈSi-1)÷ долларов. Всего потрачено ê ê долларов. Покажем, что минимальное покрытие X содержит не намного меньше множеств, чем построенное. В этом можно убедиться, показав, что для любого множества SÎÁ общая сумма денег, полученная всеми элементами S, не превосходит H(çSï) (суммы первых çSï членов гармонического ряда), тогда, чтобы выбрать общую сумму çÁï, потребуется не менее çÂï/ H(max{çSï: SÎÁ}) элементов оптимального покрытия. Для полученного покрытия  и оптимального покрытия Â*:



ç ê = S cx £ S S cx и будет показано, что S cx £ H(çSï),

xÎX SÎÂ* xÎS xÎS

так что çÂ ê £ S H(çSï) £ çÂ* ê× H(max{ çS ê: SÎÁ}), ч.т.д.

SÎÂ*

Докажем неравенство S cx £ H(çSï). Пусть S ÎÁ и S содержит

xÎS

u элементов. Каждый из этих элементов получил какую-то сумму денег, покажем, что общая сумма для всех элементов S не превосходит H(u)=

1+1/2+…+1/u. Каждый из S, получивший свои деньги раньше других элементов S, получил не более 1/u; общее количество элементов, получивших деньги на этом шаге не меньше u, так как жадный алгоритм выбирает множество, покрывающее наибольшее число еще не покрытых элементов, и не может выбрать множество, худшего S.

 

 

Следствие.Алгоритм Greedy-Set-Cover дает решение задачи о покрытии, хуже оптимального не более чем в (ln çX ê+1) раз.

Алгоритм Greedy-Set-Cover дает хорошие приближения, если множества, из которых составляется покрытие, содержат мало элементов.

 



<== предыдущая лекция | следующая лекция ==>
Общая задача коммивояжера | Формулы и функции


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.161 сек.