- •Московский Государственный Университет им. Н.Э.Баумана
- •1.Введение
- •1.1.Предмет и цель курса лекций.
- •1.2.Некоторые необходимые определения и понятия.
- •2.Задачи, алгоритмы
- •2.1.Задача
- •2.2.Алгоритм
- •3.Нормальные алгорифмы Маркова (нам).
- •4.Машины Тьюринга
- •4.1. Одноленточная мт
- •4.2.Многоленточная мт
- •4.3.Недетерминированная мт
- •4.4.Оракульная мт
- •5.Равнодоступная адресная машина (рам) и некоторые другие подходы.
- •6.Сравнение различных формальных схем.
- •6.1.Кодировки входных данных.
- •6.2.О мерах сложности
- •6.3.Теоремы сравнения
- •6.4.Полиномиальные и неполиномиальные оценки сложности
- •7.Сложность алгоритмов некоторых задач.
- •7.1.Задача нахождения максимального числа.
- •7.2.Задача сортировки.
- •7.3.Задача о камнях.
- •7.4.Простота числа.
- •7.5.Задача о кратчайшем (минимальном) остове (остовном дереве).
- •7.6.Задача коммивояжера.
- •7.7.Задача о кратчайшем пути.
- •7.8.Задача о выполнимости кнф (кнф-выполнимость)
- •8.Схемы из функциональных элементов. Схемная сложность.
- •8.1.Схемы из функциональных элементов
- •8.2.Оценки сложности сфэ.
- •9.Теория np-полноты
- •9.1.Классы p и np.
- •9.2.Сводимость задач
- •9.2.1.Смысл сводимости
- •9.2.2.Полиномиальная сводимость
- •9.2.3.Сводимость по Тьюрингу
- •9.3.Теорема Кука
- •9.4.Структура класса np и некоторые выводы
- •10.Иерархия сложности
- •10.1. Классы np и co-np
- •10.2.Классы p-space и np-space. Элементы исчисления предикатов.
- •10.2.1.Классы сложности p-space и np-space
- •10.2.2.Логика предикатов и pspace –полные задачи.
- •10.3.Классы p и p/poly.
- •10.4.Некоторые результаты
- •11.Подходы к решению np-полных задач
- •11.2.Приближенные алгоритмы
- •11.3.Полиномиально-разрешимые частные случаи np-полных задач
- •11.4.Методы направленного перебора
- •12.Параллельные вычисления
- •12.1.Классификация моделей параллельных вычислений.
- •12.2.Примеры способов параллельной обработки данных
- •12.3.Вопросы производительности параллельных вычислений
- •12.3.1.Основной вопрос сложности параллельных вычислений
- •12.3.2.Асимптотическая производительность
- •12.3.3.Гипотеза Минского.
- •12.4.Пример параллельного вычисления.
- •13.Коммуникационная сложность
- •14.Рекомендованная литература
8.2.Оценки сложности сфэ.
Оценки функции Шеннона L(n) строятся из тех же соображений, что и оценки сложности задачи. Верхние оценки получаются путем построения конкретной СФЭ, реализующей функцию f(n). Для этого было разработано в 1950-е годя целое направление в дискретной математике – методы синтеза СФЭ. А вот нижние оценки получаются «из мощностных соображений».
Построим СФЭ, реализующую функцию f = . Перегруппируем множители, собрав в одном месте переменные с нулевыми степенями. Тогда, перенумеровав переменные, функцию можно переписать в виде
f = (xi & . .. & xk)& (хк+1 Vхк+2 V ...V хп).
Заметим, что в этой формуле не более n операций. Значит, сложность схемы данной функции не превосходит n.
Выше мы рассматривали очевидный метод построения СФЭ по совершенной ДНФ функции. Их него сразу следует
Утв. L(n) ≤(n +1) 2n.
Замечание. На самом деле легко доказать, что L(n)≤ (n + 1) 2n-1. Действительно, посмотрим на таблицу значений нашей функции и выясним, чего в ней больше: нулей или единиц. В зависимости от этого будем использовать, соответственно, СДНФ либо СКНФ. В самом худшем случае будет 2n-i дизъюнкций или коньюнкций.
Дальнейшее улучшение позволяет избавиться и от множителя n. Построим по индукции СФЭ, которая будет реализовывать множество функций Kn - все конъюнкции со сложностью C(n).
Обозначим через Kn множество всех функций вида . Сейчас мы будем строить схему, которая реализует все функции из Kn. Сложность такой схемы обозначим C(n). При n = 1 получается схема без элементов. Предположим, что мы уже построили схему для всех множеств с номерами меньше n. Зафиксируем число k < n. Построим схему, реализующую все функции из Kn, используя в качестве подсхем две схемы: для Kk и для Kn-k.
Рассмотрим произвольную конъюнкцию:
(xi & . .. & xk)& (хк+1 Vхк+2 V ...V хп).
Возьмём по одному выходу из схем для Kk и Kn-k, реализующие множители в скобках, и подключим их к конъюнктору. Получим схему, реализующую одну конъюнкцию от n переменных. Также поступим со всеми 2n конъюнкциями от n переменных, то есть будем строить их, используя соответствующие выходы в схемах Kk и Kn-k, связывая их конъюнктором. Итого получим схему для Kn, затратив C(k)+C(n — k)+2n элементов. Теперь возьмём к := n/2 и получим С(п) ≤2n +2С(n/2) = 2n(2n/2+2С(n/4))=2n+2n/2+1+4С(n/4)) .
Отсюда следует, что можно (асимптотически) улучшить оценку для L(n): реализовав все конъюнкции ценой ~ 2n элементов, склеим их не более чем 2n дизъюнкциями, в итоге получим схему сложности порядка 2n+1.
Дальнейшее улучшение в n раз дает метод Шеннона синтеза схем. Он просто использует разложение функции по k переменным
F(x1,…,xn) = .
Пусть k = n-q. Реализуем все конъюнкции Kk первых k переменных, при этом потратим 2k элементов. Кроме этого, может потребоваться реализовать все функции от q переменных, которых всего . Каждую из них можно реализовать со сложностью q2q. При склейке основной схемы по указанной выше формуле потребуется ещё 2k конъюнкторов (для вычисления слагаемых) и ещё 2k -1 дизъюнкторов. Итого
L(n) < 2k + 2k + (2k — 1) + q 2q < 3 • 2k + q 2q .
Положим q := [logn] — 1. Тогда
L(n) < 6•2n-[logn] + n•logn•2n/2-1 =12•2n / n + n•logn•2n/2-1 < 12•2n / n .
Наконец, следующая теорема О.Б.Лупанова дает окончательную неулучшаемую асимптотическую оценку. Само доказательство взято из лекций О.Б.Лупанова.
Теорема. Справедливо соотношение L(n) < 2n / n .
Доказательство. Рассмотрим произвольную булеву функцию n переменных. Отделим q := n-k первых переменных и рассмотрим таблицу, в которой 2k строк и 2q столбцов. Строки занумеруем всевозможными значениями последних k переменных, а столбцы — всевозможными значениями первых q переменных. Ячейки таблицы заполним значениями функции. Каждый столбец представляет собой значения функции, полученной подстановкой констант в первые q переменных, то есть . Разрежем таблицу на горизонтальные полоски по s строк в каждой (последняя полоса будет, возможно, меньше; пусть в ней s' < s строк). Число полос будет равно p=[2k /s]< 2k /s+1.
Через Ii обозначим индикатор i-й полосы, то есть функцию, которая равна единице на строках этой полосы, и только на них. Обозначим теперь
= Ii.
. Такие функции называются обрезанными функциями. Ясно, что
= .
Тогда имеем
f(x1,…,xn) = .
Реализуем все конъюнкции первых q переменных, потратив 2q элементов. Кроме этого, реализуем все конъюнкции последних k переменных, потратив 2k элементов. Все обрезанные функции имеют не более s ненулевых значений, значит, их количество не превышает 2s. Поскольку все конъюнкции последних переменных уже есть, на изготовление СДНФ для каждой обрезанной функции уйдёт всего s дизъюнкций, значит, всего на реализацию обрезанных функций каждой полосы мы потратим не более s2s элементов, а всего — не более ps 2s.
На сборку каждой уйдёт ещё p дизъюнкций (поэтому всего на это уйдёт p 2q операций), а на сборку функции f уйдёт ещё 2q конъюнкций и 2q дизъюнкций.
Суммируя полученные оценки, имеем
L(f) < 2q + 2k + ps2s + p2q + 2q + 2q = 3 2q + ps 2s + p2q + 2k.
Вспоминая, что р< 2k /s+1, получаем
L(f) < 3 • 2q +(2k /s+ 1)(s2s + 2q) + 2k.
Видно, что s должно быть порядка п, но всё же чуть меньше его. Что касается к, то нужно, чтобы 2k /s→∞, чтобы нам не мешала единица в скобках. Положим k := [2 log n] и s := [n — 4 log n]. Подставляя эти значения, получаем оценку порядка 2n / n
Теорема доказана.
Чтобы доказать, что получена асимптотически неулучшаемая оценка, нужно аналогичную асимптотику L(n) > 2n / n снизу.
Пусть P* (n) — функции, существенно зависящие от n переменных. N(h, n) — число функций, существенно зависящих от n переменных, которые реализуются схемами сложности, не превосходящей h. N'(h, n) — число функций, существенно зависящих от n переменных, которые реализуются схемами сложности ровно h; N''(h, n) — число схем сложности h для функций, существенно зависящих от n переменных. Очевидно, что N' = N, потому что всегда можно дополнить схему ничего не делающими элементами. Очевидно также, что N≤N'', так как одну функцию можно реализовать разными схемами, но не наоборот.
Покажем, что для любого ε>0, число функций, реализуемых схемами сложностью меньше (1 — ε ) 2n / n , гораздо меньше, чем всех функций. Итак, покажем, что для ho= (1 — ε ) 2n / n выполнено соотношение N(ho,n)<< |P*(n)|. Мы будем оценивать величину N, мажорируя её величиной N''.
Пусть y(p, q) — число графов с q ребрами и p= h + n вершинами (n входов и h элементов), N''(h, n, q) — число схем с q ребрами. Сколько схем можно сделать из одного графа? У нас имеется не более:
2q способов выбрать ориентацию ребер;
( h + n) n способов выбрать входы;
3h способов присвоения вершинам различных ФЭ;
h + n способов выбора выхода.
Число γ(n,m) связных графов с n вершинами и m ребрами не превосходит
nm-nconstn+m. Действительно, чтобы из n-вершинного дерева сделать m-рёберный граф, нужно дополнительно провести ещё m—(n— 1)= k ребро. Из каждой вершины дерева можно выпустить куда-то ребро (так, чтобы второй конец пока не входил ни в какую вершину). Это можно сделать, очевидно, способами. Теперь эти концы надо как-то подсоединить к имеющимся вершинам. Это можно сделать mn способами. Значит, существует не более
mn mn способов получить из дерева граф. А поскольку количество деревьев не превосходит 4n-1, то в итоге имеем оценку сверху
4n-1mn 4n-1mn ≤4n-1 2mnpm-n ≤ 8n8m npm-n . Таким образом, достаточно взять const = 8.
Отсюда получаем:
N(h, n, q) ≤ γ(n,m) 2q (h + n)n+1 3h ≤ consth+n+q(h + n)q—h+1 2q 3h. (15)
Вспоминая, что q ≤ 2h, и собирая константы в новую константуB , имеем:
N''(h, n, q)≤ B3h+n(h + n)h+1.
Теперь получим оценку для N''(n, h):
N''(h, n, q)≤ B3h+n(h + n)h+1.
N''(n,h)≤ N''(h,n,q)≤ B3h+n(h + n)h+1(h + 1) ≤ (C(h + n))h+n.
Нам нужно убедиться, что N''(ho,n) < |P*(n)| при достаточно больших n. Заметим, что|P*(n)| > 22" — n ≈ 22". Таким образом, требуемое неравенство будет выполнено, если при n→∞ будет выполняться
Далее для достаточно больших n:
log N’’(ho,n) — 2n + o(1) ≤ (ho + n) log(C(ho + n)) — 2n + o(1)≤((1-ε)2n/n+n)n
-2n + o(l) = (1-ε)2n + n2 - 2n + o(l) = n2 + o(1) — ε2n →∞ при n→∞.
что и требовалось доказать.