
- •Раздел первый
- •Раздел второй
- •Раздел третий
- •Раздел четвертый
- •Раздел пятый
- •Раздел шестой
- •Раздел седьмой
- •Из последнего равенства аналогичным образом для некоторого целого неотрицательно-
- •Раздел восьмой
- •Раздел девятый
- •Решаем четыре системы сравнений
- •Раздел десятый
- •Раздел одиннадцатый
- •Раздел двенадцатый
- •Раздел тринадцатый
- •Раздел четырнадцатый
- •Раздел пятнадцатый
- •Раздел шестнадцатый
Раздел пятый
1. Классификационная оценка сложности алгоритмов для арифметических задач.
В
силу сложившихся традиций натуральные
(и целые) числа в арифметике часто
обозначаются буквой n.
Учитывая тогда, что длина такого слова
равна
,
оценки полиномиальности и экспоненциальности
выглядят соответственно как
и
.
2. Примеры полиномиальных алгоритмов.
1) Алгоритм Евклида.
Алгоритм
Евклида есть алгоритм нахождения
наибольшего общего делителя двух
натуральных чисел, скажем а
и b.
Обозначим
.
Пусть, кроме того,
и
.
Положим i=1.
Работа на i-ом
шаге алгоритма выглядит так:
,
т.е.
производится операция деления с остатком.
Если
,
то
,
иначе, увеличиваем i
на 1 и производим
новое деление с остатком.
Легко
заметить, что указанный алгоритм имеет
полиномиальный характер. Действительно,
из неравенства
следует, что остаток от деления за два
шага алгоритма уменьшается более чем
вдвое. Тогда, если t
это число шагов, то выполняется
неравенство:
.
Откуда, логарифмируя, получаем
.
К
сказанному добавим еще, т.н., расширенный
алгоритм Евклида,
который, например, позволяет решать
сравнения вида
.
Добавляя к принятым обозначениям новые,
имеем:
,
где
.
Тогда
верно, что
и, значит,
.
2) Бинарный метод.
Этот
алгоритм производит возведение целого
числа в натуральную степень по заданному
модулю. Пусть требуется найти
.
Представим число d
в системе счисления с основанием 2:
,
где
.
Здесь, очевидно,
.
Тогда
.
Если подсчитать количество операций умножения s , то получим оценку вида
.
Ясно,
что операция взятия по модулю не меняет
статуса алгоритма как полиномиального.
Если учитывать, что машинная арифметика
предполагает в основном вычисления с
битовым представлением чисел, то следует
добавить при этом, что сложение и
вычитание требуют
,
а умножение и деление с остатком –
времени для чисел порядка n.
3) Вычисление символа Якоби.
Пусть
требуется вычислить значение символа
Якоби
.
Считаем, что
.
.
Если
,
то
1) при
;
иначе,
2) при
.
.
Если
,
то
.
После выделения степеней 2 и «переворотов» по закону взаимности символ Якоби приводится к виду:
,
что позволяет
немедленно получить ответ. Легко видеть,
что каждый «переворот» соответствует
делению с остатком, как это было в
алгоритме Евклида, поэтому общее число
«переворотов» оценивается величиной
2
.
Если добавить к этому еще вычисления с
четным числителем символа и вычисление
степеней -1, то оценка времени работы
алгоритма будет полиномиальной, именно:
для С>2.
3. Вероятностные алгоритмы.
Вероятностный
алгоритм отличается от детерминированного
тем, что ему на вход кроме входного слова
w
поступает некоторая случайная
последовательность
,
где
.
Выход u
зависит как от w,
так и от r.
Случайные последовательности должны
выбираться с равными вероятностями
.
Вероятностные алгоритмы могут давать
ошибочный ответ.
Говорят, что
вероятностный алгоритм решает массовую
задачу с вероятностью
ошибки
если для любой индивидуальной задачи
w
он дает ее правильное решение
с вероятностью не меньшей, чем
.
Такие алгоритмы называются алгоритмами
Монте-Карло. Среди таких алгоритмов
различают подкласс алгоритмов типа Лас
Вегас.
Говорят, что
Лас-Вегас алгоритм решает массовую
задачу с вероятностью
неудачи
если для любой индивидуальной задачи
w
он дает ее правильное решение
с вероятностью не меньшей, чем
или выдает сообщение о невозможности
решения. Последнее – с вероятностью
.
На вероятностные алгоритмы переносится понятие полиномиального времени. Оно оценивается на входе w, как максимальное по r время, требующееся алгоритму, работающему со словом w и использующему случайную последовательность r.
Для решения задачи распознавания выделяют еще вероятностные алгоритмы с односторонней ошибкой. Именно:
Определение. Вероятностный (Монте-Карло) алгоритм, решающий задачу распознавания языка L, называется вероятностным алгоритмом с односторонней ошибкой если выполнены условия:
При
алгоритм принимает вход с вероятностью
1.
При
алгоритм отвергает вход с вероятностью
не менее, чем
.
Для таких
алгоритмов существует простая схема
уменьшения вероятности ошибки. Эта
схема реализуется следующим вероятностным
алгоритмом. Пусть А – вероятностный
алгоритм с односторонней ошибкой
.
Тогда алгоритм В работает так:
Вход:
N.
1)
Генерируется случайная последовательность
.
Эта последовательность разбивается на
t
равных частей
так что каждая из
,
где
,
является случайной последовательностью
длины s.
2)
Моделируется работа алгоритма А на
слове w
с каждой из указанных случайных
последовательностей
,
.
При этом получаются t
ответов
,
.
3)
Если
,
то вход принимается, иначе, вход
отвергается.
Легко
увидеть, что алгоритм В есть вероятностный
алгоритм с односторонней ошибкой, ибо
если
,
то с вероятностью
вход принимается,
а если
,
то так как вычисления на t
шагах были независимыми, то В может
ошибиться с вероятностью
.
Если положить
,
C
> 0 (т.к.
,
то ошибка алгоритма В выражается
величиной
,
что означает экспоненциальное понижение
величины ошибки. При этом если алгоритм
А был полиномиальным, то даже при
полиномиальном росте t
алгоритм В будет тоже полиномиальным
вероятностным алгоритмом.
4. Оракульные алгоритмы.
Под оракулом
понимается любая функция
.
Оракульный алгоритм – это алгоритм в
обычном смысле слова, но снабженный
специальной функцией: обращением
к оракулу.
Алгоритм А, имеющий доступ к оракулу
обозначим через А
.
Вырабатывая некоторое слово
,
алгоритм обращается с запросом
w
к оракулу,
вычисляет значение
–
ответ оракула
– и продолжает свою работу, используя
этот ответ. Один и тот же алгоритм может
иметь доступ к разным оракулам. Само
понятие оракула весьма широкое. В
терминах программистской практики
обращение к оракулу можно рассматривать,
как обращение к подпрограмме. Оракульные
алгоритмы позволяют сформулировать
описание сравнимости алгоритмических
задач по их сложности.
Определение.
Говорят, что задача
сводится к задаче
при помощи оракульного алгоритма А
,
если для любого оракула
,
который произвольную индивидуальную
задачу w
массовой задачи
отображает в ее правильное решение,
оракульный алгоритм А
решает задачу
.
Такой оракульный алгоритм называют
сведением задачи
к задаче
.
Определение. Сведение называется полиномиальным, если А полиномиален.
Определение. Если задача полиномиально сводится к задаче , то говорят, что задача не сложнее задачи , а задача не проще, чем задача .
Понятие оракульного алгоритма переносится и на вероятностные алгоритмы.
Определение. Если задача полиномиально сводится к задаче , а задача полиномиально сводится к задаче , то такие задачи называются полиномиально эквивалентными.
Примером полиномиально эквивалентных задач могут служить задача нахождения нетривиального делителя натурального числа n>1 и задача факторизации числа n.