Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[285]

37.2-2

Задачу коммивояжёра можно решать с помощью эвристики ближайшей точки следующим образом. Начнём с тривиального цикла, содержащего одну вершину (её можно выбрать произвольно). Затем будем расширять его так: выбираем самую близкую в циклу вершину v, смотрим, какая вершина и цикла ближе всего кии вставляем v в цикл сразу после и. Так мы делаем до тех пор, пока цикл не пройдёт через все вершины. Докажите, что полученный таким образом цикл имеет стоимость не более чем вдвое худшую оптимального.

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

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

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

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

Исходным данными задачи о покрытии множествами (set-covering problem) являются конечное множество X, а также семейство Т его подмножеств. При этом каждый элемент множества X принадлежит хотя бу одному из подмножеств семейства Т:

set

Мы ищем минимальное число подмножеств из J7, которые вместе покрывают множество X, то есть семейство mathcalC наименьшей мощности, для которого

37.2-3

37.2-4

sec


Рис. 37.3 37.3. Пример исходных данных для задачи о покрытии множествами. Множество X состоит из 12 чёрных точек. Семейство Т состоит из 6 множеств Si-Se. Минимальное покрытие имеет размер 3 (множества S3, S4, S5). Жадный алгоритм даёт покрытие размера 4, велючая в него множества Si, S4, S5 и S3 (в указанном порядке).

Такое семейство С мы буде называть покрытием множества X. (Пример задачи о покрытии приведён на рис. 37.3.)

Можно представлять себе X как набор навыков, необходимых для выполнения какого-то задания; есть несколько человек, владеющих некоторыми из них. Надо сформировать минимальную группу для выполнения задания, включающую в себя носителей всех необходимых навыков.

Задачу о покрытии множествами можно сформулировать в варианте, требующем ответа да/нет: «существует ли покрытие размера не болтше к» (для любого заданного к). В упражнении 37.3-2 мы попросим вас доказать, что эта задача является NP-полной.

Жадный приближённый алгоритм

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

1U <- X

2mathcal{C> <- О

3while U \пе \emptyset

4do выбираем S \in \mathcal{F} с наибольшим S\cap U

5U <- U - S

6\mathcal{C> <- \mathcal{C> \cup \{S\>

7return \mathcal{C}

В примере на рис. 37.3 этот алгоритм выбирает множества в таком порядке: Si, S4, S5 и S3.

У каждый момент работы алгоритма множество U содержит ещё не покрытые элементы, а семейство С - уже включённые в покрытие подмножества. На шаге 4 производится жадный выбор: в качестве S берётся множество, покрывающее наибольшее число ещё не покрытых элементов (если таких несколько, берём любое). После этого S добавляется к семейству С, а его элементы удаляются из U. В конце концов множество ещё не покрытых элементов (U) пусто, а С является покрытием множества X.

Видно, что алгоритм Greedy-Set-Cover полиномиален (время работы оценивается многочленом от Х и \F\): количество повторений цикла не превосходит min(X, \F\), а каждое повторение легко реализовать за 0(А • \F\) операций, так что всего будет 0(Х • \F\ min(X, \F\)) операций. В упражнении 37.3-3 мы предложим вам реализовать этот алгоритм за линейное время.

Анализ алгоритма


Теперь мы должны сравнить размер покрытия, даваемого этим алгоритм, с минимально возможным. Нам понадобится обозначение Н(d) для суммы первых d членов гармонического ряда (см. раз-

Теорема 37.4.

Размер покрытия, даваемого алгоритмом Greedy-Set-Cover, превосходит минимально возможный не более чем в

Доказательство.

Жадный алгоритм отбирает множества одно за другим, на каждом шаге выбирая то из них, которое покрывает больше всего непокрытых элементов. Будем представлять себе, что на каждом шаге имеется доллар, который поровну распределяется между всеми вновь покрытыми элементами. Таким образом, каждый элемент получает деньги только однажды - на том шаге, когда он впервые попадает в покрытие, и получает тем больше денег, чем меньше элементов оказались в том же положении. Формально говоря, если элемент х входит в множество Si, выбранное на г-ом шаге работы алгоритма, и не входит в Sk при меньших к, то он получит

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

Всего будет израсходовано \С\ долларов, по одному на каждый элемент построенного покрытия С. Эти деньги будут каким-то образом распределены между всеми элементами множества X (элемент х получает сх долларов). Нам надо показать, что оптимальное покрытие (содержащее минимально возможное число множеств) не может быть сильно меньше нашего. Мы сделаем это, убедившись, что для любого множества S из семейства Т общая сумма денег, полученная всеми элементами S, не превосходит Н(\S\), и потому понадобится не менее \С\/Н(max{\S\ : S G J7}) элементов оптимального покрытия, чтобы набрать общую сумму в \С\.

Формально говоря, для оптимального покрытия С* мы имеем

дел 3.1): tf(d) = £ti 1/г.

H(max{\S\ : S G J7})

раз.

1

Si- (S1US2U...S1)\

(37.9)

sec*xes



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98] [стр.99] [стр.100] [стр.101] [стр.102] [стр.103] [стр.104] [стр.105] [стр.106] [стр.107] [стр.108] [стр.109] [стр.110] [стр.111] [стр.112] [стр.113] [стр.114] [стр.115] [стр.116] [стр.117] [стр.118] [стр.119] [стр.120] [стр.121] [стр.122] [стр.123] [стр.124] [стр.125] [стр.126] [стр.127] [стр.128] [стр.129] [стр.130] [стр.131] [стр.132] [стр.133] [стр.134] [стр.135] [стр.136] [стр.137] [стр.138] [стр.139] [стр.140] [стр.141] [стр.142] [стр.143] [стр.144] [стр.145] [стр.146] [стр.147] [стр.148] [стр.149] [стр.150] [стр.151] [стр.152] [стр.153] [стр.154] [стр.155] [стр.156] [стр.157] [стр.158] [стр.159] [стр.160] [стр.161] [стр.162] [стр.163] [стр.164] [стр.165] [стр.166] [стр.167] [стр.168] [стр.169] [стр.170] [стр.171] [стр.172] [стр.173] [стр.174] [стр.175] [стр.176] [стр.177] [стр.178] [стр.179] [стр.180] [стр.181] [стр.182] [стр.183] [стр.184] [стр.185] [стр.186] [стр.187] [стр.188] [стр.189] [стр.190] [стр.191] [стр.192] [стр.193] [стр.194] [стр.195] [стр.196] [стр.197] [стр.198] [стр.199] [стр.200] [стр.201] [стр.202] [стр.203] [стр.204] [стр.205] [стр.206] [стр.207] [стр.208] [стр.209] [стр.210] [стр.211] [стр.212] [стр.213] [стр.214] [стр.215] [стр.216] [стр.217] [стр.218] [стр.219] [стр.220] [стр.221] [стр.222] [стр.223] [стр.224] [стр.225] [стр.226] [стр.227] [стр.228] [стр.229] [стр.230] [стр.231] [стр.232] [стр.233] [стр.234] [стр.235] [стр.236] [стр.237] [стр.238] [стр.239] [стр.240] [стр.241] [стр.242] [стр.243] [стр.244] [стр.245] [стр.246] [стр.247] [стр.248] [стр.249] [стр.250] [стр.251] [стр.252] [стр.253] [стр.254] [стр.255] [стр.256] [стр.257] [стр.258] [стр.259] [стр.260] [стр.261] [стр.262] [стр.263] [стр.264] [стр.265] [стр.266] [стр.267] [стр.268] [стр.269] [стр.270] [стр.271] [стр.272] [стр.273] [стр.274] [стр.275] [стр.276] [стр.277] [стр.278] [стр.279] [стр.280] [стр.281] [стр.282] [стр.283] [стр.284] [стр.285] [стр.286] [стр.287] [стр.288] [стр.289] [стр.290] [стр.291] [стр.292] [стр.293] [стр.294]