Неформально, идея параллельного алгоритма для поиска MIS состоит в том, что на каждой итерации находится
независимое множество S, которое добавляется к уже построенному I и S ∪ Γ(S) удаляется из графа. Чтобы число
итераций было небольшим, независимое множество S должно быть таким, чтобы S ∪ Γ(S) было большим. Напря-
мую этого добиться трудно, но мы добиваемся того же эффекта доказывая, что число ребер инцидентных S ∪ Γ(S),
составляет значительную долю остающихся ребер.
Для реализации этой идеи мы выбираем большое случайное множество вершин R ⊆ V . Маловероятно, что R будет
независимым, но с другой стороны имеется немного ребер, оба конца которых принадлежат R. Для получения неза-
висимого множества из R мы рассмотрим такие ребра и удалим концевые вершины с меньшей степенью. Это дает
независимое множество.
Эта идея реализована в алгоритме Parallel MIS. Предполагается, каждой вершине и каждому ребру приписан свой
процессор. Таким образом, требуемое число процессоров есть O(n + m).
Алгоритм Parallel MIS:
Вход: Граф G = (V, E).
Выход: Максимальное по включению множество I ⊆ V .
1. I := ∅.
2. повторить
2.1. для всех v ∈ V выполнить (параллельно)
если d(v) = 0 то добавить v к I и удалить v из V
иначе пометить v с вероятностью 1/2d(v).
2.2. для всех (u, v) ∈ E выполнить (параллельно)
если и u и v обе помечены
то удалить пометку у вершины меньшей степени.
2.3. для всех v ∈ V выполнить (параллельно)
если v помечена то добавить v к S.
2.4. I := I ∪ S.
2.5. удалить S ∪ Γ(S) из V и все инцидентные ребра из E.
пока V = ∅.
Упражнение 1. Покажите, что алгоритм гарантированно находит максимальное по включению независимое множе-
ство за линейное число итераций.
Цель дальнейшего анализа показать, что случайный выбор на шаге 2.1 обеспечивает что математическое ожидание
числа итераций есть O(log n).
Упражнение 2. Покажите, что каждая итерация алгоритма может быть реализована за время O(log n) на модели
EREW PRAM с (n + m) процессорами.
Анализ
Определение. Вершина v ∈ V называется хорошей, если она имеет не менее d(v)/3 соседних вершин степени не более
d(v). В противном случае вершина называется плохой. Ребро называется хорошим, если хотя бы одна из его концевых
вершин является хорошей, и плохим в противном случае.
Лемма 1. Пусть v ∈ V – хорошая вершина степени d(v) > 0. Тогда вероятность того, что некоторая вершина
w ∈ Γ(v) становится отмеченной, не меньше 1 − exp(−1/6)).
Доказательство. Каждая вершина w ∈ Γ(v) помечается независимо с вероятностью 1/2d(w). Поскольку v является
хорошей, существует не менее d(v)/3 вершин в Γ(v) со степенью не более d(v) (обозначим это множество через Γ
∗
(v)).
Каждый из этих соседей становится отмеченным с вероятностью не менее 1/2d(v). Значит, вероятность P
bad
, что ни
одна из этих соседних v вершин не будет помечена не превосходит
P
bad
≤
Y
w∈Γ
∗
(v )
1 −
1
2d(w)
≤
1 −
1
2d(v)
d(v ) /3
≤ e
−1/6
.
Остальные соседи v могут только помочь в увеличении интересующей нас вероятности.
Лемма 2. В течение каждой итерации, если вершина помечена, то она выбирается в S с вероятностью не менее 1/2.
Доказательство. Единственная причина того, что помеченная вершина w становится непомеченной, и, следователь-
но, не выбранной в S, является наличие соседней помеченной вершины степени не менее d(w). Каждая такая соседняя
вершина помечена с вероятностью, не превышающей 1/2d(w), и число таких соседних вершин не превышает, конечно,
d(w). Таким образом, вероятность, что помеченная вершина будет выбрана в S, не меньше, чем
1 − Pr [∃x ∈ Γ(w) такая, что d(x) ≥ d(w) и x помечена ] ≥
101