Теория алгоритмов в задачах информационной безопасности конспект лекций. Учебное пособие
.pdfЗаметим, что при данном определении к экспоненциальным оценкам относятся, например, оценки вида О(nlog2 n ). Некоторые
авторы оценки такого вида называют субэкспоненциальными, под которыми понимаются такие оценки, которые превосходят любой
полином, но меньше, чем О(2nε ) для любого ε > 0.
Определение. Проблема П разрешима за полиномиальное вре-
мя, если существует машина Тьюринга Т, решающая ее за полиномиальное время.
Понятие класса P
Р – класс проблем (или задач), разрешимых за полиномиальное время.
Относительно класса Р необходимо сделать следующие замечания:
1.В определении Р существенным является фиксация схемы кодирования α. Многие естественные схемы кодирования полиномиально эквивалентны, т.е. позволяют переходить от одного кода задачи к другому за полиномиальное время от длины кода. В этом случае принадлежность (или непринадлежность) задачи П классу Р определяется инвариантно по отношению к схемам кодирования. Однако это справедливо не всегда, и, вообще говоря, класс сложности Р зависит от схемы кодирования, поэтому там, где схема кодирования не очевидна или может повлиять на класс сложности, ее следует указывать явно.
2.Класс Р определен через функцию временной сложности машины Тьюринга. Можно сделать соответствующие определения через любую другую алгоритмическую модель.
Однако имеется ряд фактов о полиномиальной эквивалентности временных функций сложности многих типов вычислительных моделей, что позволяет утверждать, что класс Р определен однозначно для «разумных» вычислительных моделей.
Полиномиальные алгоритмы обладают свойством «замкнутости», – можно комбинировать полиномиальные алгоритмы, используя один в качестве «подпрограммы» другого, и при этом результирующий алгоритм будет полиномиальным. В силу приведенных причин используется следующая терминология.
61
Определение. Полиномиальные алгоритмы называют эффек-
тивными.
Определение. Полиномиально решаемые задачи называют лег-
корешаемыми.
Определение. Экспоненциально решаемые задачи называют
труднорешаемыми.
Для практики важным аспектом является классификация задач по признаку труднорешаемости, хотя следует заметить, что установление легкорешаемости задачи еще не означает ее практическую решаемость. Например, установление полиномиальной оцен-
ки О(n1000)
начальных значениях n. Аналогичное замечание можно сделать относительно труднорешаемости. Заметим, что труднорешаемость задачи может быть связана с тем, что ее решение настолько велико, что не может быть записано в виде выражения, длина которого была бы ограничена полиномом от длины входа. Чтобы исключить этот тип труднорешаемости, рассматриваются только такие задачи, которые имеют «короткий» ответ.
Рассмотрим примеры задач из класса сложности P.
Пример 1. Пусть М = {1, 2,…, n} – конечное множество, и R M x M – бинарное отношение на М. Рассмотрим задачу проверки, является ли R отношением эквивалентности. Будем задавать
индивидуальную задачу матрицей AR = (aij), i, j = 1,n , где
1, если (i, j) R;
ai j = 0, в противном случае.
Ясно, что R будет отношением эквивалентности тогда и только тогда, когда матрица AR имеет единичную диагональ, симметрична,
и выполнено соотношение bij ≤ aij , i, j =1,n , где (bij )= AR2 –
матрица отношения R2.
Кроме того, AR 2 = AR AR , где имеется в виду булево умноже-
ние матриц. Очевидно, что сложность рассматриваемой задачи
О(n2).
62
Пример 2. Бинарное отношение R называется связным, если для любых i, j = 1, n существует k такое, что выполнено iR k j .
Бинарное отношение R называется эйлеровым, если элементы R можно упорядочить так:
R : (i1, j1),(i2, j2),...,(it , jt ), t = R ,
при этом будет выполнено (j1,i2) R, (j2,i3) R,...,(jt −1,it ) R, (jt ,i1) R. Очевидно, что эйлерово отношение является связным.
Можно доказать, что связное отношение R является эйлеровым тогда и только тогда, когда число единиц в матрице AR совпадает в
i-м столбце и в i-й строке для каждого i = 1,n. Это дает алгоритм сложности О(n2), проверяющий эйлеровость отношения R. Ясно,
что связность отношения R проверяется за О(n2) действий.
Заметим, что здесь главным для нас является установление полиномиальности рассматриваемых задач, а не установление наилучших алгоритмов.
Пример 3. Бинарное отношение R называется гамильтоновым, если элементы М можно так упорядочить i1, i2,…, in, что выполнено соотношение
(i1,i2) R,(i2,i3) R,...,(in−1,in ) R, (in ,i1) R. |
(7.1) |
В настоящее время неизвестно полиномиального алгоритма от n проверки гамильтоновости произвольного отношения R. Тривиальный алгоритм требует n! упорядочений множества М и проверки условий (7.1), что превосходит по величине любой полином от n.
Пример 4. Рассмотрим стандартную задачу линейного програм-
мирования: для данных целочисленной матрицы А размера m × n, m-вектора b и n-вектора c:
а) найти n-вектор x с рациональными координатами такой, что x ≥ 0 и Ax = b, cT x → min;
б) установить, что не существует n-вектора x такого, что x ≥ 0 и
Ax = b;
в) установить, что множество {cT x: x ≥ 0 и Ax = b} не ограничено снизу.
63
Хачиян в 1979 г. установил, что данная задача принадлежит классу Р.
Понятие класса NP задач распознавания
Определим теперь класс NP задач распознавания, т.е. имеющих ответ «ДА» или «НЕТ». Для того чтобы задача I содержалась в классе NP, требуется только, чтобы в случае, если I имеет ответ «ДА», существовало бы слово с(I) длиной, ограниченной полиномом от размера I, такое, что задача с начальными данными с(I), I принадлежит Р.
Определение. Слово с(I) называется удостоверением или до-
гадкой для задачи I.
Пример задачи из класса NP. Пусть дана задача проверки гамильтоновости бинарного отношения R M x M на множестве М = {1, 2,…, n}. Если R – гамильтоново отношение, то удостоверением этого будет последовательность элементов М: с(R) = i1i2…in. Имея пару с(R), R, легко убеждаемся, проверяя соотношения (7.1), верно ли, что R – гамильтоново отношение. Следовательно, задача проверки гамильтоновости бинарного отношения лежит в классе
NP.
Формализуем теперь данные идеи. Класс NP определяется через понятие недетерминированного алгоритма. Введем понятие неде-
терминированной машины Тьюринга (НТ).
Схема НТ выглядит следующим образом (рис. 7.1).
… |
|
|
x1 |
x2 |
… |
xn |
|
|
|
|
|
|
|
–3 –2 –1 |
0 |
1 |
2 |
… |
n |
|
УМ
Рис. 7.1. Недетерминированная машина Тьюринга: УМ – угадывающий модуль
Отличие от обычной машины Тьюринга заключается в том, что НТ имеет дополнительно угадывающий модуль (УМ), который мо-
64
жет только записывать на ленту слова из внешнего алфавита. Поскольку речь идет о задачах распознавания, то удобно считать, что машина имеет два заключительных состояния qY и qN, соответствующие ответам «ДА» и «НЕТ». Работа машины имеет две стадии:
1-я стадия – угадывание. В начальный момент на ленте записано слово x = x1…xn – код индивидуальной задачи I, начиная с ячейки 1. В ячейке 0 записан знак раздела между догадкой и условиями *. УМ просматривает ячейку –1. Затем УМ пишет произвольное слово с(х) по одной букве за такт в каждой ячейке с номерами –1, –2, –3,…. В итоге 1-й стадии конфигурацией машины бу-
дет с(х)*q1x.
2-я стадия – решение. На этой стадии НТ работает как обычная машина Тьюринга с конфигурацией с(х)*q1x. Если машина через конечное число шагов приходит в состояние qY, то говорим, что она
принимает конфигурацию с(х)*q1x. Говорят, что НТ принимает x,
если существует слово с(х) такое, что конфигурация с(х)*q1x принимается.
Определим время работы НТ, положив tHT (x)= t1 (x)+t2 (x), (если х принимается), где t1(x) – время работы на стадии 1, т.е., по
определению, t1(x)= c(x); t2(x) – время работы на стадии 2, т.е., по определению, t2(x)= tT (c(x)* x) (Т – соответствующая (обычная) машина Тьюринга).
Определим tHT (n)= max tHT (x).
x, x =n
Определение. НТ решает задачу П за полиномиальное время,
если tHT (n)=O(p(n)) для некоторого полинома р.
Заметим, что временная функция определена только для тех индивидуальных задач х, которые принимаются машиной НТ.
Определение. Класс задач NP – множество задач, для которых существует НТ, принимающая за полиномиальное время те и только те слова, которые соответствуют индивидуальным задачам с ответом «ДА».
Определение. Класс задач NP – все задачи, решаемые за полиномиальное время на НТ, способной параллельно выполнять неограниченное количество вычислений.
65
Разберем теперь вопрос о взаимоотношении между введенными классами Р и NP. Ясно, что Р NP. Имеется много причин считать это включение строгим, однако этот факт пока не доказан.
Теорема. О задачах из класса NP. Если задача П NP, то существует такой полином р, что П может быть решена детерминиро-
ванным алгоритмом со сложностью O(2p(n)), n – размер задачи П.
Доказательство. Пусть НТ – недетерминированная машина Тьюринга, решающая задачу П, и q(n) – полином, ограничивающий временную функцию сложности НТ. Не нарушая общности, можно
считать, что q(n) =c1nc2 (с1, с2 – константы). По определению клас-
са NP, если вход х длиной n принимается НТ, то существует слово с(х) длиной не более чем q(n) такое, что НТ дает ответ «ДА» не более чем за q(n) шагов. Значит, общее число возможных словдогадок не более чем kq(n), где k – мощность внешнего алфавита НТ. Считаем, что все догадки имеют длину q(n), в противном случае их можно подравнять. Теперь можно представить детерминированный алгоритм решения задачи П, который на каждом из kq(n) словдогадок реализует 2-ю стадию работы НТ и работает q(n) тактов. Алгоритм дает ответ «ДА», если найдется слово-догадка, приводящее к принимающему вычислению. Время работы данного алгоритма q(n)kq(n). Ясно, что существует подходящий полином р(n) такой, что сложность описанного алгоритма не превосходит
O (2p(n)), что и требовалось доказать. Замечания относительно класса NP:
1.Класс NP один и тот же для различных вычислительных моделей, использующих недетерминированные операции.
2.Класс P замкнут относительно дополнения задач. Для класса NP этого утверждать нельзя.
Определение. Дополнением A задачи распознавания А называ-
ют задачу, в которой коды задач с ответом «ДА» в точности соответствуют кодам задач А, которые не имеют ответа «ДА».
Обозначение: СО-NP – класс задач, являющихся дополнениями к задачам класса NP.
66
7.3. Полиномиальная сводимость задач
Если P ≠ NP, то задачи из NP\P являются труднорешаемыми. Цель дальнейших результатов состоит в доказательстве того, что существуют конкретные задачи П, для которых справедливо включение П NP\P, если P ≠ NP. Соответствующие результаты основаны на понятии полиномиальной сводимости задач.
Пусть П1, П2 – две задачи распознавания, задаваемые в алфавитах А1 и А2 соответственно.
Определение. Говорят, что задача П1 полиномиально сводится к задаче П2 (обозначение: П1 П2), если существует словарная
функция f : A1* → A2* такая, что выполнены условия:
1)f полиномиально вычислима;
2)x A1* выполнено: х – индивидуальная задача П1 с ответом
«ДА» f (x) A2* – индивидуальная задача П2 с ответом «ДА».
Утверждение. О сводимости задач из класса P. Если выполне-
но П1 П2 и П2 P, то П1 P.
Доказательство. Предложим полиномиальный алгоритм решения задачи П1: x П1, находим f (x) П2 и применяем к f (x) по-
линомиальный алгоритм, существующий по условию. Если получен ответ «ДА», то х имеет ответ «ДА». В противном случае х имеет ответ «НЕТ». Время работы алгоритма не превосходит
p f (x )+ p2 (p f (x )), где pf – полином, ограничивающий время вы-
числения функции f, участвующей в сведении П1 П2, p2 – полином, ограничивающий время решения задачи П2.
Утверждение. О сводимости задач. Если выполнено П1 П2 и
П2 П3, то П1 П3.
Доказательство. Очевидно, так как функция f3(x) = f2(f1(x)) осуществляет сведение П1 П3, если f1, f2 дают сведения П1 П2, П2 П3 соответственно.
67
7.4. NP-полные и NP-трудные задачи
Определение. Задача П называется NP-трудной, если выполнено П1 П для любой задачи П1 NP.
Определение. Задача П называется NP-полной, если она является NP-трудной и П NP.
Обозначение: NPС – класс NP-полных задач, NPН – класс NP- трудных задач.
По определению имеем:
NPС ∩ P ≠ P = NP,
NPH ∩ P ≠ P = NP,
NPС ∩ (NP\P) ≠ NPС ∩ P = .
Другими словами, если для какой-то NP-полной задачи существует полиномиальный разрешающий алгоритм, то и для любой задачи из класса NP существует полиномиально разрешающий алгоритм. То же высказывание справедливо относительно NP-трудной задачи. Если какая-то NP-полная задача не лежит в классе Р, то и все NP-полные задачи не лежат в классе Р.
Утверждение. О NP-полных задачах. Если задачи П1, П2 NP,
П1 П2 и П1 NPС, то П2 NPС.
Доказательство. Пусть П’ NP – произвольная задача. Тогда по определению П’ П1. Поскольку по условию П1 П2, то согласно утверждению о сводимости задач имеем П’ П2, что и требовалось доказать.
Приведем примеры NP-полных задач.
Пример 1. Задача о клике. По произвольному графу G (V, E) и числу k узнать, имеется ли в графе G полный подграф с k вершина-
ми (клика).
Граф называется полным, если любые две вершины соединены ребром.
Пример 2. Говорят, что некоторое множество вершин V1 V графа G(V, E) образует вершинное покрытие графа, если для любого ребра e E найдется инцидентная ему вершина v V1 этого множества.
68
Задача о вершинном покрытии. По произвольному графу G(V, E) и числу К узнать, имеет ли граф вершинное покрытие мощности k.
Пример 3. Говорят, что множество вершин V1 V графа
G(V, E) независимо, если никакие две вершины из V1 не связаны ребром.
Задача о независимом множестве вершин. Для произвольного графа G(V, E) и целого числа k выяснить, существует ли в G независимое множество из к вершин.
Пример 4. Задача об изоморфизме подграфу. Для заданных двух графов G(V1, E1) и H(V2, E2) выяснить, содержит ли граф G(V, E) подграф, изоморфный Н.
Пример 5. Проблема разрешимости диофантовых уравнений вида ax2 +by +c = 0, a,b,c .
69
Лекция 8. Алгоритмы проверки простоты чисел
В настоящей лекции будут рассмотрены вопросы, связанные с определением простоты чисел, необходимых, в первую очередь, для реализации асимметричных алгоритмов. Изучаются достаточно простые способы тестирования простоты чисел, такие как метод пробных делений, решето Эратосфена, тест на основе малой теоремы Ферма. Приводятся тесты, определяющие простоту чисел специального вида: чисел Ферма и чисел Мерсенна, обсуждаются вопросы применения вероятностных тестов, обосновываются методы построения простых чисел.
Ключевые слова: простое число; каноническое разложение числа; тест на простоту; метод пробных делений; решето Эратосфена; число Кармайкла; число Ферма; число Мерсенна; вероятностный тест; тест Соловея–Штрассена; тест Лемана; тест РабинаМиллера; алгоритм Конягина–Померанса.
Введение. После описания общих вопросов теории алгоритмов перейдем к алгоритмам, нашедшим непосредственное применение в криптографии. Начнем с алгоритмов тестирования чисел на простоту. Для выполнения алгоритмов с открытым ключом требуются простые числа. Очевидно, что установить простоту числа гораздо проще, чем разложить его на множители, поэтому в прикладных задачах генерируется случайное число, а затем проверяется, является ли оно простым. Существуют различные вероятностные тесты, определяющие с заданной степенью достоверности факт простоты числа. Если степень достоверности будет достаточной, то такие тесты признаются надежными.
8.1.Простые числа и элементарные методы проверки простоты чисел
Натуральное число p, большее единицы, называется простым, если оно делится нацело только на 1 и на себя. Основная теорема арифметики гласит, что любое натуральное число n, большее единицы, может быть разложено в произведение простых чисел, при-
70
