Научная статья на тему 'Алгоритм минимизации функционала, ассоциированного с задачей 3-SAT и его практические применения'

Алгоритм минимизации функционала, ассоциированного с задачей 3-SAT и его практические применения Текст научной статьи по специальности «Математика»

CC BY
278
51
i Надоели баннеры? Вы всегда можете отключить рекламу.
Журнал
Компьютерная оптика
Scopus
ВАК
RSCI
ESCI
Область наук

Аннотация научной статьи по математике, автор научной работы — Дулькейт В. И., Файзуллин Р. Т., Хныкин И. Г.

Одной из наиболее интересных задач дискретной математики является задача поиска решающего набора в задаче ВЫПОЛНИМОСТЬ. После классической работы Кука [5] усилия многих исследователей были направлены на построение эвристических, переборных алгоритмов решения КНФ. Перспективным направлением представляется и сведение КНФ к непрерывному аналогу, к задаче поиска точек глобального минимума ассоциированного функционала. В данной работе обосновывается выбор функционала специального вида и предлагается применить к решению системы нелинейных алгебраических уравнений, определяющих стационарные точки функционала, модифицированный метод последовательных приближений. В работе также показано, что метод может быть с успехом применен к важным задачам криптографического анализа несимметричных шифров.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Дулькейт В. И., Файзуллин Р. Т., Хныкин И. Г.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Алгоритм минимизации функционала, ассоциированного с задачей 3-SAT и его практические применения»

АЛГОРИТМ МИНИМИЗАЦИИ ФУНКЦИОНАЛА, АССОЦИИРОВАННОГО С ЗАДАЧЕЙ 3-8АТ

И ЕГО ПРАКТИЧЕСКИЕ ПРИМЕНЕНИЯ

В.И. Дулькейт, Р. Т. Файзуллин, И.Г. Хныкин Омский государственный университет им. Ф.М.Достоевского

Аннотация

Одной из наиболее интересных задач дискретной математики является задача поиска решающего набора в задаче ВЫПОЛНИМОСТЬ. После классической работы Кука [5] усилия многих исследователей были направлены на построение эвристических, переборных алгоритмов решения КНФ. Перспективным направлением представляется и сведение КНФ к непрерывному аналогу, к задаче поиска точек глобального минимума ассоциированного функционала. В данной работе обосновывается выбор функционала специального вида и предлагается применить к решению системы нелинейных алгебраических уравнений, определяющих стационарные точки функционала, модифицированный метод последовательных приближений. В работе также показано, что метод может быть с успехом применен к важным задачам криптографического анализа несимметричных шифров.

Введение

Пусть L(x) - пропозициональная формула в конъюнктивной нормальной форме на множестве булевых переменных x е BN {0,1}. Задача ВЫПОЛНИМОСТЬ (SAT) заключается в том, что бы найти решающий набор x0 е BN {0,1}, такой что L(x0) = ИСТИНА или доказать, что решающего

набора не существует.

Рассмотрим переход от задачи ВЫПОЛНИМОСТЬ к задаче поиска глобального минимума функционала.

Пусть дана КНФ: м

L(x) = ^ c, , где c, - дизъюнкты вида

i=1

c, = U q, з (xs). Здесь q,, j (x}) = x} или xj

j< N

Сделаем переход к эквивалентной ДНФ:

вида

L = L (x) = ^ Ci , где Ci - конъюнкты

i=1

C = П Qb (Xj )• Здесь QUj (xj) = qUj (xj)

j < N

Рассмотрим функционал вида:

M

mmF (x) = 2 Ci(x), где

i=1

N

C(x) = ПQij(xj), где

(1)

j=i

Qi.j (xj) =

(1 - xj)2 , если xj e Ci (x)

если xj e Ci (x)

1

,иначе

Суммирование ведется по всем М конъюнктам ДНФ, эквивалентной исходной КНФ. Соответствие

между булевыми и вещественными переменными следующее: ЛОЖЬ^-О, ИСТИНАМ.

Переход от булевой формуле к вещественной основан на использовании соответствия:

Уг V ^ X + Xj

У, л yj ^ Хг2xj2 , где {y, e В, хг e

Уг ^ (1 - X ) Легко заметить, что min F (x) = 0 соответству-

xeEN

ет достижению значения ИСТИНА на исходной КНФ.

Без потери общности можно рассмотреть 3-ДНФ, эквивалентную исходной КНФ:

J(х) = Z z,2z)zl , где

Г1 - xi , если xi e ci (x)

z = ■

(2)

I х1 , если xi е с (х)

Здесь ci (х) - / триплет

Дифференцируя функционал по всем переменным xi, получаем систему уравнений:

X2Xх =2i = 1,2,Р, где

Н = {% / е % : хг е с (х)}

л /г • е — ✓ ч\ или (3)

Л = {, ^ Xi е с (х)}

4(х1,--, хг_1, хг+1 ,--хи) ■ х = Bi(х1,--, хг_1, хг+1 ,--хт), I = 1,.. Р

Коэффициенты Ai и В{ связаны соотношением:

4(X1,••, х_1, х+1 ,-х„) ^ В (X1,••, х _1, х+1 ,-х„)

Поясним выбор представления исходной КНФ именно в виде эквивалентной 3-ДНФ. Дифференцируя функционал F (х) (1) по всем переменным х{,

£

получаем систему уравнений аналогичную (3), но

количество вкладов в Аг и Вг определятся длиной

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

Рассмотрим систему (3), как нелинейное операторное уравнение:

Ф( х) = 0 (4)

Как показано в [5] применение метода Ньютона к решению данного уравнения неэффективно, т.к. решение принадлежит ядру производного оператора. Как альтернатива был предложен метод последовательных приближений с «инерцией»[2]: к

(Е Е арХг С - Р) Х] Ц - Р) )X, ( + 1) =

р=0^еН

Ех2(¡У2«) ~ А• х,(1 +1) = В (5)

^еЛ

E«p = 1

,где а е Л[0,1]

p=i

Имеется ввиду то, что итерации происходят для вещественных чисел, а итоговый или промежуточный вектор проектируется на BN{0,1}, и уже на булевом векторе проверяется SAT. Ниже мы опишем различные модификации и гибридизации метода последовательных приближений с «инерцией» в применении к решению задачи K-SAT, и покажем способы повышения эффективности алгоритма.

Гибридизация алгоритма

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

Итерация состоит из двух блоков. Первый блок, определяется формулой (5), используется схема Зейделя. Суть схемы Зейделя в том, что при нахождении очередного xi (t +1) на (t +1) -й итерации,

это значение подставляется вместо xi (t) . Необходимо отметить, что реализация алгоритма допускает использование схемы Якоби, когда найденные xi (t +1) не используются в текущей итерации. Тесты показали, что схема Зейделя более устойчива в применении к решаемой задаче. Именно, после каждой итерации по схеме Зейделя значение функционала монотонно уменьшается, чего нельзя сказать о схеме Якоби. Кроме того, во всех случаях схема Зейделя быстрее приводила к решению. Отметим, что данное обстоятельство препятствует напрашивающейся простой схеме распараллеливания процесса решения с разделением данных.

Второй блок - реализация сдвига по градиенту. Рассмотрим (4). Пусть X (1) является решением, тогда Ф(X(1)) = 0 . Уравнение (5) переписывается в виде А(х(1)) • X (1) - В()) = 0 . Это необходимое условие, которому должен удовлетворять вектор решения. Если текущее 1 -е приближение X (1) не является решением, то

А (X(1)) • xг (1) - Вг (X (1)) = рг Ф 0. Для итеративной формулы: Аг (X(1)) • xi (1 +1) - Bi (X(1)) = pi.

Следовательно, что бы удовлетворить необходимому условию, необходимо перейти к вектору:

X- (1 + 1) = X- (1) + Рг / Аг (6)

Очевидно, что после реализации (6) возможна ситуация, когда xi (1 +1) £ ^[0,1]. В этом случае необходимо штрафным способом ограничивать xi (1 +1), иначе метод начинает экспоненциально

расходиться. Особенно это проявляется на К-8ЛТ формулах при К>4. При приближении к решению скорость сходимости может сильно уменьшаться, т.е. алгоритм формирует цикл лежащий на некотором плато (поверхность, определяемая функционалом) и траектория, образованная последовательными приближениями более не выходит за пределы этого плато. Чтобы сойти с плато и продолжить сходимость к решению применяется т. н. метод смены траектории.

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

Рассмотрим 3-КНФ, эквивалентную исходной 3-ДНФ (1):

K (x) = П (Z + zj + zk ^ где

Z ='

(xi , если xi е ci (x) |l-xi ,если xi еci(x)

(7)

Здесь ci (x) - i триплет.

К(X) = 1 о (+ г; + г, ) Ф 0,

Для данного приближения X , рассмотрим множество переменных:

Е 0 = { xi | 3 триплет сг : xi или-,^ е сг & ci (X) = 0}

С вероятностью т_р поменяем значения xi на противоположные. При этом, вероятность того, что другие триплеты станут невыполнимыми не высока. Экспериментально установлено, что полученный

вектор X!-, обладает свойствами не худшими, чем X

i

(количество невыполнимых триплетов до и после операции примерно одинаково). Используя данный

вектор x0 в качестве нового начального приближения, алгоритм очень быстро (в большинстве случаев за 5-10 итераций) находит следующее приближение, на котором функционал F (x) достигает значения не хуже, чем на векторе x . При этом, очень часто, удается проскочить плато, но при дальнейшем движении по новой траектории метод может зациклиться на другом плато. Тогда метод смены траектории повторяется.

Дополнительно рассмотрим множество:

E1 = { xi 13 триплет ci : xiили-x е c. & ci (x) = 1}

Введем вероятности m_p0, m_p1. С вероятностью m_p0 при смене траектории будем использовать множество E0. С вероятностью m_p1 - множество E1 . Вероятность m_p0 влияет на величину изменения вектора и при этом количество невыполнимых триплетов не увеличивается. Вероятность m_p1 влияет на качественное изменение вектора, количество невыполнимых триплетов может увеличиться. В принципе, чем выше m_p1, тем меньшую роль играют рестарты. Метод смены траектории применяется при достижении условия

F (x2) - F ( x1) <^2.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Преобразование исходной КНФ методом резолюции

Преобразование позволяет получить КНФ с меньшим количеством дизъюнктов и литералов, эквивалентную исходной.

«Резольвента» - дизъюнкция конъюнктов, отличающихся знаком по единственной переменной. Все возможные резольвенты добавляются к КНФ и используются для вычисления других резольвент.

Дублирующие конъюнкты и тавтологии удаляются, и используется сокращенная процедура с глубиной рекурсии 1. Вычислительная сложность процедуры O(n • log n) . Метод резолюции в применении к КНФ, ассоциированных с задачами факторизации и дискретного логарифмирования (см. ниже) позволяет уменьшить исходное число конъюнктов до 50%.

Подробно о методе резолюций можно найти в [4]

Результаты численных экспериментов

После каждой модификации проводилось тестирование алгоритма для определения эффективности проделанных изменений. При тестировании использовалось несколько типов примеров: тесты с соревнований решателей SAT 2005 года www.lri.fr/~simon/, тесты библиотеки SATLib www.cs.ubc.ca/~hoos/, тесты, сформированные для задач факторизации и дискретного логарифмирования, тесты для КНФ больших размерностей, сформированные случайным образом.

Результаты - метод последовательных приближений с инерцией

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

N

О = — < 0.5 , где N это число переменных, M чис-M

ло скобок в 3-SAT (эксперименты проводились

вплоть до N « 106, M « 2 • 106), итерационная процедура всегда сходится к решению. Но при увеличении О скорость сходимости резко падает и, хотя большинство компонент решения x формируется верно, и быстро, оставшаяся часть оказывается практически недостижимой.

Результаты - метод последовательных приближений с инерцией (+ сдвиг по градиенту)

Оказалось, что сдвиг по градиенту хорошо сокращает погрешности и ускоряет сходимость алгоритма. Вычислительные эксперименты со случайными формулами показали заметное уменьшение времени решения тестов. Число решенных примеров увеличилось примерно на 20%. Применение данного приема позволило достаточно эффективно решать тесты uf20-91 (из 1000 тестов решены 703). Однако некоторые тесты решались только после задания определенного начального приближения, что говорит о необходимости рестартов. На примерах uf250-1065 алгоритм показал результат 6% от стандартных трудных тестов (предыдущая версия алгоритма - 1%). Тесты SAT-2005 (0KGenerator10000-42000 - 10000 переменных, 42000 скобок) использовались в сокращенной форме. Максимально удалось решить подформулы из 36000 скобок (предыдущая версия алгоритма - 35000 скобок). На подформулах из более чем 36000 скобок метод зацикливается на некотором плато. Это говорит о необходимости смены траектории.

Результаты - метод последовательных приближений с инерцией (+ метод смены траектории)

Метод смены траектории существенно увеличил число решаемых примеров. Результаты представлены в таблице 1.

Увеличение разрядности вычислений

Была исследована сходимость алгоритма при увеличении разрядности вычислений. Испытания с типами DOUBLE и FLOAT показали преимущество вычислений с двойной точностью. При переходе на тип DOUBLE количество решенных примеров увеличивается на 10%, скорость сходимости в среднем также увеличивается. Дальнейшее увеличение разрядности к значимому эффекту не приводит.

Таблица 1. Результаты тестирования алгоритма + метод смены траектории

Наименование Количество ли- Количество Число тес- % решенных Максимальное

теста тералов (N) дизъюнктов (M) тов тестов число итераций

Backbone-minimal Sub-instances (формулы с минимальным хребтом), 3-SAT

RTI 100 429 500 98,6 19988

BMS 100 <429 500 79,8 29831

Controlled Backbone Size Instances (b - размер хребта), 3-SAT

CBS b10 100 403 1000 100 38972

CBS b10 100 449 1000 100 38880

CBS b90 100 449 1000 98 29738

Uniform Random 3-SAT (UF)

uf20-91 20 91 1000 100 448

uf250-1065 250 1065 100 98 9731

SAT-encoded "Flat" Graph Colouring Problems

flat30-60 90 300 100 100 4317

Возможные практические применения

В последнее время наблюдается повышенный интерес к проблеме кодирования криптографических алгоритмов в терминах задачи выполнимости (SAT). В работе [1] эскизно иллюстрируется подход, позволяющий в принципе свести задачу факторизации к SAT. Целью данного пункта статьи является построение алгоритмов генерации эквивалентных, но различных КНФ и последующей минимизации ассоциированного функционала, для задачи факторизации, задачи дискретного логарифмирования, задачи дискретного логарифмирования на эллиптической кривой.

Результаты работы алгоритма для задачи факторизации

Результаты приведены в табл. 2.

Таблица 2. Результаты тестирования полного алгоритма для задачи факторизации.

Для группы задач длины до 72 бит факторизуе-мого числа были получены точные решения. При этом эффективность предложенного метода превосходит известные нам алгоритмы.

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

Рис.1. Рост процентного отношения числа верных бит к числу бит факторизуемого числа.

Для тестирования использовалось 50 различных тестов для каждой размерности. В качестве сомножителей выбирались числа, удовлетворяющие всем тестам, гарантирующим криптостойкость RSA. На рисунке представлены усредненные данные. Обратим внимание на то, что вне зависимости от размерности задачи для каждого теста проводилось всего 1000 итераций. Исходя из таблицы 2 можно сделать предположение о том, что размерность 56 бит является «слабой» для алгоритма минимизации.

1* 2* 3* 4* 5* 6*

20 254 4979 0.1 с 0.1 с 0.1 с

32 801 17867 2 м >1 ч 1.8м

40 990 22333 7 м >1 ч 12 м

44 1199 27291 36 м >1 ч >1 ч

48 1428 32741 3,5 ч >10ч >10ч

56 1946 45141 36 м >10ч >10ч

60 2235 52079 10,2ч >20ч >20ч

68 2873 67455 79 ч >100ч >100ч

72 3222 75881 168ч >200ч >200ч

1*- Число бит в факторизуемом числе 2*- Количество литералов 3*- Количество дизъюнктов

4*- Время решения методом последовательных приближений

5*- Время решения алгоритмом ЯЛМОУ (победитель 2005 г.)

6*- Время решения алгоритмом 8ЛТ7 (один из лучших переборных алгоритмов) Знак '>' означает, что за указанное время решение найдено не было

Сведение к КНФ задачи факторизации

Рассмотрим непосредственно алгоритм сведения к КНФ задачи факторизации. Требуется для заданного числа п получить КНФ, решающий набор которой существует тогда, и только тогда когда п составное число. Кроме того, решающий набор должен содержать все биты двоичного представления нетривиальных делителей п. Без потери общности, рассмотрим классический алгоритм умножения «столбиком». Будем отождествлять биты сомножителей и результата с литералами (свободными логическими переменными). Результат умножения первого сомножителя на 1-ый бит второго можно представить в виде вектора Pi . Именно суммирование

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

промежуточных векторах Sk .

Весь процесс вычисления можно разбить на три этапа относительно операции сложения:

1) Сложение векторов составленных из произведений двух литералов. Выполняется один раз. В результате этой операции будет заполнен вспомогательный вектор сумм S1 и вычислено два младших бита результата. Условно данный этап можно записать так: P1 + P2 = , г2, г1 ) .

2) Суммирование вектора Sk с вектором произведений. Выполняется N-3 раз. В результате заполняется массив Sk+1 и вычисляется очередной бит результата

+ р =(^, г- ), г = 3... N -1

Последнее суммирование вектора Sk с вектором произведений. Выполняется один раз. В результате вычисляются оставшиеся биты результата.

SN-2 + PN (2N ' ' ' rN )

'Ы-2

Кодирование основных операций

Теперь перейдём к рассмотрению идеи генерации КНФ. Простейший случай - приравнивание одного литерала другому: X = у . Данное равенство будет справедливо тогда и только тогда, когда истинна формула (X V у)( V у ) .

Другим часто встречающимся выражением явля-

ется:

х = А 0 В 0 С

(10)

Поступая аналогичным образом, получаем эквивалентную формулу:

( х v(A 0 B 0 C )) х v(A 0 B 0 C ) (Ах 0 Вх 0 Сх 0 х ))Ах 0 Вх 0 Сх )

(11)

Для представления правой части в виде КНФ воспользуемся леммами 1, 2.

Лемма 1.

N

uf1 v х521 v — v хÔN

N ), где в

© ^г = П^

г [8 }еМы

левой части сумма по модулю 2, МЫ - множество

двоичных векторов длины N содержащих чётное число нулей. Операция «возведения в степень» имеет стандартный для булевой алгебры смысл:

х5 =

х, 5 = 0 х, 5 = 1

Лемма 2.

N

v х5

i=1

L

vn У

j=1

J

п

{п }2LI {0,0,...,0}

N

v хс. \ i=1 г

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

L

v v

j=

1 ( )

У

После применения леммы 1 будут получены конъюнкты следующего вида:

d

d v abc v хус), т.е. можно выделить 3 вида дизъюнктов внутри каждого конъюнкта:

1) Одиночные литералы (то к чему следует стремиться: в правильной КНФ все дизъюнкту должны быть одиночными литералами).

2) Дизъюнкты вида J J х5 , которые по правилу де

Моргана можно легко свести к одиночным литералам.

3) Дизъюнкты вида J J х5 , наиболее трудный

случай, сведение скобок с такими дизъюнктами к КНФ иллюстрируется леммой 2. Отдельного рассмотрения заслуживает операция вычисления переноса в следующий разряд при суммировании трёх слагаемых. Перенос может быть вычислен через соответствующую сумму:

с = carr

у(х, у, z, sum) = (т^хуГфхуТ)

Выполнение данного равенства эквивалентно истинности следующей формулы:

c v (sum Ф xyz Ф xyz

c v sum Ф xyz Ф xyz J )

Приведённое выражение можно преобразовать положив: x = c, A = sum, B = xyz, C = xyz.

И далее описанной выше процедурой можно построить соответствующую КНФ. Трудоемкость полученного алгоритма оценивается, как O (n2) в зависимости от количества бит исходного числа. Для факторизации числа, представляемого двоичным вектором длиной 1024 бит получились КНФ с 500 000 переменными 12000 000 скобок. Отметим, что результат о превышении числа верных бит после нескольких тысяч итераций алгоритма (5) относится именно к числу переменных, например, из 500 000 переменных мы получаем в среднем 300 000 верных, что в силу очевидных соотношений между битами переноса по строке, отвечающей нулевому биту, может существенно облегчить решение основной задачи.

Сведение к КНФ других задач криптоанализа Были построены аналогичные алгоритмы сведения для задач дискретного логарифмирования и дискретного логарифмирования на эллиптической кривой. Предложен алгоритм генерации множества эквивалентных КНФ для задачи факторизации, учитывающий неделимость на малые простые числа. Последнее обстоятельство позволяет строить параллельные версии приведенных выше алгоритмов и методикой «голосования бит» определять верные биты с большой вероятностью.

Заключение Разработанный метод не уступает известным методам решения SAT на многих группах тестовых примеров и превосходит их на тестах задачи факторизации больших размерностей. Показан рост относительного числа верно найденных бит для задачи факторизации с ростом размерности задачи, так для рабочего числа бит 1024 среднее значение верных бит равно 61.75%, что больше стартового значения в 59.5% для 50 бит. Кроме того, показано наличие

«слабых» размерностей, для которых метод является эффективным. Аналогичные результаты получены и для задачи дискретного логарифмирования, но основным препятствием здесь является высокая размерность получающихся задач, так для 1024 бит число переменных в функционале оценивается величиной 10 000 000 000, а число дизъюнктов на порядок больше. Результаты точного решения КНФ, эквивалентных задаче дискретного логарифмирования приведены в таблице 3.

Таблица 3. Результаты тестирования полного алгоритма для задачи дискретного логарифмирования.

1* 2* 3* 4* 5* 6*

18 28224 448018 63.57 97.23 81.16

20 38840 623239 108.20 >1800 >1800

22 51832 839032 182.73 >1800 >1800

24 67440 1099630 277.46 >1800 >1800

26 85904 1409250 417.71 >1800 >1800

1*- Размерность, бит 2*- Количество литералов 3*- Количество дизъюнктов

4*- Время решения методом последовательных приближений, сек

5*- Время решения алгоритмом RANOV, сек (победитель 2005 г.)

6*- Время решения алгоритмом SATz, сек (один из лучших переборных алгоритмов) Знак '>' означает, что за указанное время решение найдено не было_

Литература

1. Беспалов Д. В., О логических выражениях для задачи 2-ФАКТОРИЗАЦИЯ // Беспалов Д.В. Семёнов А.А.Вычислительные технологии. - 2002. - Т.7 - Ч.2.

2. Файзуллин Р. Т. О решении нелинейных алгебраических систем гидравлики // Сибирский журнал индустриальной математики. -1999.-№2. -С. 176-184.

3. Файзуллин Р. Т., Алгоритм минимизации функционала, ассоциированного с задачей 3-SAT и его практические применения, // Файзуллин Р.Т., Хныкин И.Г., Дулькейт В.И., Салаев Е.В.- г.Челябинск, 2007.

4. Хныкин И.Г., Модификация КНФ, эквивалентных задачам криптоанализа асимметричных шифров методом резолюции // ИТМУ № 8, 2007.

5. Cook S.A. The Complexity of Theorem Proving Procedures. Proceedings Third Annual ACM Symposium on Theory of Computing, May 1971.

i Надоели баннеры? Вы всегда можете отключить рекламу.