Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Book-advanced-algorithms.pdf
Скачиваний:
310
Добавлен:
27.03.2016
Размер:
5.11 Mб
Скачать

Глава 3

Вероятностный анализ детерминированных алгоритмов

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

Среди подходов к решению NP-трудных задач можно выделить два основных. Первый заключается в построении приближенных алгоритмов с гарантированными оценками точности получаемого решения (этот подход уже был рассмотрен нами в главе 2), а второй — в отказе от анализа сложности алгоритмов по наихудшему случаю и переходе к анализу сложности в среднем. Настоящая глава посвящена изучению второго подхода (анализу сложности в среднем).

Известно, что большинство задач дискретной оптимизации является NP-трудным, и для них существование полиномиальных алгоритмов маловероятно. Несмотря на это, для многих исходных данных

118

3.1. СЛОЖНОСТЬ И ПОЛИНОМИАЛЬНОСТЬ В СРЕДНЕМ

119

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

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

Таким образом, естественные попытки ослабить требования в определении эффективности привели к понятию сложности в среднем (average case complexity), под которым, грубо говоря, понимается математическое ожидание времени работы алгоритма при заданном вероятностном распределении на исходных данных. С середины 80-х годов начала развиваться теория сложности в среднем, в некотором смысле аналогичная теории полиномиальной сводимости для NP-трудных задач. Кроме того, для ряда NP-полных задач удалось построить полиномиальные в среднем алгоритмы. Однако достигнутые здесь успехи оказались гораздо скромнее результатов в теории сложности при анализе по худшему случаю.

В последнее время получен ряд интересных результатов для задач типа рюкзака с константным числом ограничений, введено новое понятие «сглаженной сложности» (smoothed complexity) и доказано, что некоторые варианты симплекс-метода имеют полиномиальную сглаженную сложность. Построены приближенные полиномиальные в среднем алгоритмы нахождения максимальной клики в графе с гарантируемыми оценками точности, существенно лучшими аналогичных оценок для худшего случая.

Перейдем к конкретизации сказанного выше. Пусть для данного алгоритма A время его работы на входе I обозначается через TA(I). Пусть также для каждого натурального n задано распределение вероятно-

120

Глава 3. ВЕРОЯТНОСТНЫЙ АНАЛИЗ ДЕТЕРМИНИРОВАННЫХ АЛГОРИТМОВ

стей на входах I длины n, обозначаемое Pn(I). Поскольку T является случайной величиной, естественным кажется определить среднее время работы алгоритма A как математическое ожидание времени работы алгоритма En TA на входах длины n.

Определение 3.1.1. «Полиномиальный в среднем (точно)»

Алгоритм A называется полиномиальным в среднем, если среднее время его работы ограничено полиномом от длины входа, т. е.

9C > 0 : En TA = O(nC):

Однако в теоретических работах, касающихся теории сводимости и сложности в среднем, полиномиальность в среднем принято определять по-другому. Причина состоит в том, что приведенное выше определение слишком чувствительно: изменение T на T 2 (типичная оценка при симуляции одной вычислительной модели на другой) может привести к тому, что алгоритм, полиномиальный в среднем, скажем, на модели RAM, не является полиномиальным в среднем на машине Тьюринга.

Упражнение 3.1.1. Приведите пример функции TA (времени работы некоторого алгоритма A) и распределения исходных данных Pn(I), для которых TA является полиномиальной в среднем (En TA = O(nc)), а TA2 — нет.

Эту ситуацию нельзя признать удовлетворительной, поскольку ничего подобного не происходит при анализе сложности по худшему случаю: определение полиномиального алгоритма не зависит от выбранной модели вычислений.

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

Определение 3.1.2. «Полиномиальный в среднем»

3.2. ЗАДАЧА УПАКОВКИ

121

Алгоритм называется полиномиальным в среднем, если для времени работы алгоритма T выполняется:

9" > 0 : En T " = O(n):

Тем не менее, в исследовании сложности в среднем конкретных алгоритмов обычно используется определение 3.1.1 «Полиномиальный в среднем (точно)» с указанием конкретной вычислительной модели, для которой проводится анализ (обычно это машины с произвольным доступом к памяти — RAM). Мы в следующих разделах также будем следовать этому определению.

3.2Задача упаковки

Алгоритм динамического программирования для задачи упаковки подмножеств. Полиномиальность алгоритма «в среднем».

Задача 15. «Упаковка» (Packing)

Дано конечное множество L из m элементов и система его подмножеств S1, …, Sn. Требуется найти максимальную по числу подмножеств подсистему попарно непересекающихся подмножеств.

При реализации и анализе алгоритмов гораздо удобней формализовать представление отношений между элементами и подмножествами в виде матрицы инцидентности.

122

Глава 3. ВЕРОЯТНОСТНЫЙ АНАЛИЗ ДЕТЕРМИНИРОВАННЫХ АЛГОРИТМОВ

Определение 3.2.1. Пусть

L = fl1; : : : ; lmg — m-элементное множество; fS1; : : : ; Sng — семейство подмножеств L;

Тогда

Элемент li и подмножество Sj инцидентны, если li 2 Sj.

Матрицей инцидентности называется f0;1g-матрица A = (aij) размером m n, для которой: aij = 1 , элемент li и подмножество Sj инцидентны.

Таким образом, задача 15 «Packing» будет эквивалентна следующей 0–1 целочисленной линейной программе:

n

 

 

xj ! max;

 

 

j=1

 

 

xj 2 f0; 1g

8j : 1 j n;

(3.1)

n

 

 

aijxj 1

8i : 1 i m:

 

j=1

В этой целочисленной линейной программе n столбцов и переменных x1; : : : ; xn соответствуют подмножествам S1; : : : ; Sn и их включению в решение, а 0–1-матрица инцидентности A = (aij) размера

3.2. ЗАДАЧА УПАКОВКИ

123

m n описывает состав каждого подмножества (см. определение 3.2.1 «Инцидентность»). Таким образом, m строк-ограничений, соответствующих m предметам, очевидным образом выражают ограничение на попарную непересекаемость выбранных подмножеств ни по одному предмету, а целевая функция равна числу таких подмножеств.

Заметим, что в литературе «Упаковкой подмножеств» называется иногда и более общая постановка ЦЛП, где c1; : : : ; cn и b1; : : : ; bm — произвольные положительные целые числа:

 

j

 

 

 

n

 

 

 

cjxj ! max;

 

 

 

=1

 

 

8j : 1 j n xj 2 f0; 1g;

 

 

 

j

 

 

 

n

 

 

8i : 1 i m

aijxj bi:

 

 

 

=1

 

 

Известно, что задача 15 «Packing» NP-полна [Joh90].

n

наборов подмно-

Тривиальный метод решения задачи 15 «Packing» — полный перебор всех N = 2

 

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

метод динамического программирования.

Обозначим через Xj множество всех допустимых булевых векторов для системы с n j нулевыми последними компонентами и через ej — вектор размерности n с единичной j-й компонентой и остальными нулевыми компонентами. Тогда можно строить множество допустимых решений Xj на основе множества Xj 1, пытаясь добавить вектор ej ко всем допустимым решениям из Xj 1. Более формально это описано в алгоритме 28.

124

Глава 3. ВЕРОЯТНОСТНЫЙ АНАЛИЗ ДЕТЕРМИНИРОВАННЫХ АЛГОРИТМОВ

Алгоритм 28 «Упаковка»: динамическое программирование

def PackingDynP(A):

m, n = A.shape

X=[( zeros(n, int), #решение zeros(m, int), #покрытие

0 )] #размер покрытия for j in xrange(n):

Sj = get_column(j)

for sol, cov, size in X[:]: newcov = cov+Sj

if max(newcov) <= 1: newsol = copy(sol) newsol[j] = 1 X.append( (

newsol,

newcov, size + 1) )

return get_optimal_set(X)

Работа алгоритма показана на рис. 3.2.

3.2.

ЗАДАЧА УПАКОВКИ

125

[[0 1

0 1]

 

 

 

 

 

 

 

[1 0

1

0]

 

 

 

 

 

 

 

[0 1

1 0]]

--> 3x4-matrix

 

A

 

column(0)+<

[0 0

0

0], [0

 

0

0]>

 

=> [0 1 0]+[0

0

0]=[0

1

 

0] => [1 0 0 0]

 

column(1)+< [0 0

0

0], [0

 

0

0]>

 

=> [1 0 1]+[0

0

0]=[1

0

 

1] => [0 1 0 0]

 

column(1)+< [1 0

0

0], [0

 

1

0]>

 

=> [1 0 1]+[0

1

0]=[1

1

 

1] => [1 1 0 0]

 

column(2)+< [0 0

0

0], [0

 

0

0]>

 

=> [0 1 1]+[0

0

0]=[0

1

 

1] => [0 0 1 0]

 

column(3)+< [0 0

0

0], [0

 

0

0]>

 

=> [1 0 0]+[0

0

0]=[1

0

 

0] => [0 0 0 1]

 

column(3)+< [1 0

0

0], [0

 

1

0]>

 

=> [1 0 0]+[0

1

0]=[1

1

 

0] => [1 0 0 1]

 

column(3)+< [0 0

1

0], [0

 

1

1]>

 

=> [1 0 0]+[0

1

1]=[1

1

 

1] => [0 0 1 1]

 

Выбран набор [1

1

0 0]

размером 2

 

Рис. 3.1: Работа алгоритма 28 «Упаковка-ДинПрог»

Нетрудно убедиться, что сложность алгоритма 28 «Упаковка-ДинПрог» составляет O((m + n)njXnj). Действительно, внешний цикл — O(n), внутренний — O(jXnj), проверка на допустимость и добавление нового решения — O(m + n).

Таким образом, сложность алгоритма существенно зависит от размера множества допустимых решений, возникающих при выполнении алгоритма.

Упражнение 3.2.1. Какие входные данные для алгоритма 28 «Упаковка-ДинПрог» заставят его работать

126

Глава 3. ВЕРОЯТНОСТНЫЙ АНАЛИЗ ДЕТЕРМИНИРОВАННЫХ АЛГОРИТМОВ

экспоненциально долго? А какие — за O(n3)?

Но можно показать, что алгоритм 28 «Упаковка-ДинПрог» может быть полиномиальным в среднем¹, т. е. работать эффективно на случайных входных данных.

Теорема 9. Пусть aij в (3.1) являются независимыми случайными величинами, принимающими значения f0; 1g, причем выполняется:

Pfaij = 1g = p;

 

Pfaij = 0g = 1 p;

(3.2)

mp2 ln n:

 

Тогда алгоритм 28 «Упаковка-ДинПрог» является полиномиальным в среднем.

Доказательство. Математическое ожидание времени работы алгоритма есть O(nm E jXnj). Поэтому для доказательства теоремы 9 достаточно будет оценить сверху математическое ожидание размера множества Xn. Пусть k > 0,

xk — вектор с k единицами (на позициях fj1; : : : ; jkg) и n k нулями;

pki — вероятность выполнения i-го неравенства для xk;

Pk — вероятность того, что xk — допустимое решение.

Упражнение 3.2.2. Чему будет равны xk, pki и Pk при k = 0?

¹Причем в более строгом варианте, в смысле определения 3.1.1 «Полиномиальный в среднем (точно)».

3.2. ЗАДАЧА УПАКОВКИ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

127

Сначала оценим сверху pki:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pki P {

n

aijxj(k) 1} = P

8

 

 

 

 

 

 

 

19

 

 

 

 

 

 

 

 

 

aij

=

 

 

 

j=1

 

 

 

 

 

 

 

:

 

j1

; :::;jk

 

 

;

 

 

 

 

 

 

 

 

 

 

 

<j

2f

g

 

=

 

 

 

 

 

 

 

aij = 09

 

 

 

 

 

aij = 19

 

 

= P

8

 

 

 

 

 

+ P

8

 

 

 

 

 

=

 

 

<j

2f

j1

; :::;jk

g

 

=

 

 

 

<j

2f

j1; :::;jk

g

 

=

 

 

 

 

 

 

p)k

 

 

 

 

 

 

 

;

 

 

= (1

p

k

+

kp

(1

1

=

(1

 

 

p)k 1(1 + p(k

1))

 

 

:

)

 

 

;

 

:

 

 

 

 

 

 

 

 

(1 p)k 1(1 + p)k 1 = (1 p2)k 1 e p2(k 1):

Теперь оценим собственно вероятность попадания xk в допустимые решения:

m

m

Pk = pki e p2(k 1) = e mp2(k 1):

=1

i=1

i

n

n

∑ ( )

Упражнение 3.2.3. Докажите, что E jXnj = k=0 k Pk.

Следовательно, мы можем оценить математическое ожидание мощности Xn следующим образом:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]