Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Булева арифметика




G

ql взаимно просто с а"-ч, так как а и q взаимно просты. Поэтому ко­эффициент при х" в левой части (22.3), равный (-l)n-qan-q(n), не

q

делится на ql, следовательно, не делится наи поэтому не сравним
с 0 по модулю п. Мы доказали, что если п — составное, то сравне­
ние (22.3) не имеет места. □

Из предложения 22.2 следует, что для проверки простоты числа п можно взять любое а, взаимно простое с п (подходит, например, 1), и проверить (22.3). Но прямая такая проверка потребует П(п) = П(2т) битовых операций, так как раскрытие скобок в левой части (22.3) дает п + 1 слагаемое. Алгоритм AKS предписывает проверку (22.3) по двум модулям

{х-а)пп (mod хг - 1, п), (22.4)

г > 0. Сравнение (22.4) понимается в том смысле, что все коэффи­циенты остатка от деления полинома (х - а)" - хп + а на хг - 1 (они будут целыми числами) делятся на п. Вычисление остатков от деле­ния (х - а)" и х" на хг - 1 производится с помощью бинарного ал­горитма возведения в степень, результат каждого умножения сразу же заменяется остатком от деления на хг - 1. Но если взять произ­вольное г g N+, то может оказаться, что (22.4) выполняется и при некоторых составных п. Число г должно подбираться специальным образом, и авторы показывают, что подходящее для целей алгорит­ма г всегда существует и может быть выбрано без существенных за­трат так, что г = 0{тъ); после выбора г сравнение (22.4) надо прове­рить для «небольшого» числа «легко определяемых» а — количество этих а есть 0{-^гт). Итоговая сложность алгоритма допускает оцен­ку 0{т1г). Заметим попутно, что в литературе по теории сложности часто используются оценки вида 0{f{m)) (О называется «О мягкое»),



Глава 5. Битовая сложность


за таким обозначением скрывается 0(/(m)log dm), где d — положи­тельное число, значение которого не уточняется. Авторы показывают, что битовая сложность их алгоритма допускает оценку 0{т21/2), ука­зывая при этом, что если верны некоторые известные в теории чисел гипотезы (для которых имеются серьезные основания полагать, что они верны), то можно взять г = 0{т2), и в этом случае сложность алгоритма в целом есть 0{ть).

На этом мы завершим разговор об алгоритме AKS, добавив лишь ко всему сказанному, что, например, в криптографии практикуются вероятностные (типа Монте-Карло) алгоритмы распознавания про­стоты, имеющие меньшую сложность, но не исключающие появле­ния, хоть и с малой вероятностью, неверного ответа. В нашем курсе такого рода алгоритмы не рассматриваются1.

Сложность булевых вычислений как сложность по числу булевых опе­раций может рассматриваться как алгебраическая сложность. Но ра­бота с булевыми величинами является фактически работой с бита­ми, и сложность по числу булевых операций в этом смысле совпа­дает с битовой сложностью. Таким образом, для алгоритмов булевой арифметики алгебраическая сложность по числу булевых операций и битовая сложность —это одно и то же. Аналогично дело обстоит и с пространственной булевой (= битовой) сложностью.

Пример 23.1. Пусть дан ориентированный граф G = {V, E),n = \V\. Пусть С = (су) — булева матрица смежности графа G: сц = 1, если и только если i -я вершина соединена ребром с j -й, i,j = 1, 2,..., п. Требуется построить для G его матрицу связности D = (di ;): d y = 1, если и только если i = j или i -я вершина соединена путем из одного или более ребер с j -й, i,j = 1, 2,..., п. Если рассматривать G как граф некоторого бинарного отношения на множестве из п элементов, то задачу можно интерпретировать как задачу построения транзитив-но-рефлексивного замыкания данного бинарного отношения. Соот­ветственно, граф, для которого D является матрицей смежности, на­зывают транзитивно-рефлексивным замыканием графа G, а саму мат­рицу D — транзитивно-рефлексивным замыканием матрицы С. Для матрицы D используется обозначение С*. На рис. 20 показан ориен­тированный граф и его транзитивно-рефлексивное замыкание. Соот-

1 По поводу этих алгоритмов распознавания простоты числа см. [21, гл. 33] и [8, гл. 4].


§ 23. Булева арифметика



 



б)

 

а)



 

2 Л 5


Рис. 20. а) Ориентированный граф; б) его транзитивно-рефлексивное замы­кание.

ветствующие матрицы C и C выглядят следующим образом


С


 

°     л
       
       
о     о

С*


 

1     л
       
       
о      

Нам понадобятся произведения булевых матриц, которые опреде­ляются как обычно: например, произведение F квадратных матриц A и B порядка n определяется формулой


fij = \/(aikAbkj), i,j = 1,2,


 


k=i

Элемент с индексами i,j для краткости будем называть (i, Л-элемен-том матрицы.

Легко видеть, что С2 = СлС— это матрица, для которой (i, j)-эле-мент равен 1, если и только если i -я вершина соединена с j -й путем длины 2 (т.е. состоящим из двух ребер). Аналогично, Ск матрица, для которой (i, j)-элемент равен 1, если и только если i -я верши­на соединена с j -й путем длины к. Пусть / — матрица, для которой (i, Л-элемент равен 1, если и только если i = j. Тогда

c*=ivcvc2v...vcn-\

Индукцией по к несложно доказать, что для любой квадратной буле­вой матрицы С и натурального к выполнено

/V C v C 2V...V C fc = (7v C)fc. (23.1)

Это дает нам

C* = (lv СУ-1. (23.2)



Глава 5. Битовая сложность


Тривиальный способ умножения булевых (n х п)-матриц требует в(п3) битовых операций. Если используется именно этот способ, то оценка числа операций для формулы (23.2) есть в(п4). Приме­нение бинарного алгоритма (пример 4.2) для возведения в степень булевой матрицы С позволяет перейти к оценке

6(n 3log n). (23.3)

Если нежелательно связывать основанный на формуле (23.2) алго­ритм построения транзитивно-рефлексивного замыкания с конкрет­ным способом умножения матриц, то верхнюю оценку числа битовых операций можно записать как

n + B (n)(A(n)+A*(n)-2), (23.4)

где В{п) — сложность используемого алгоритма умножения булевых (п х п)-матриц; слагаемое п отражает расход на сложение с матри­цей I.

Рассмотренный пример высвечивает связь задачи построения транзитивно-рефлексивного замыкания ориентированного графа с за­дачей умножения булевых матриц. Эта связь оказывается очень тес­ной, о чем мы еще будем говорить в § 28.

В следующем примере задача построения транзитивно-рефлексив­ного замыкания решается без использования умножения булевых матриц.

Пример 23.2. Исследуем сложность алгоритма С. Уоршелла, пред­назначенного для построения матрицы С*. В процессе применения этого алгоритма матрица С* строится за n = | V | шагов, после fc-го шага получается матрица D (fc) = (d?5), и d?) = ^ если и только если i -я вершина соединена таким путем с j -й, номера всех промежуточ­ных вершин которого не выходят за пределы множества {1,2,..., А:}. Вначале полагаем D (0) =/ V С. Затем для каждого к = 1, 2,..., п нахо­дим D «:

dm = d *_1) V (d (,fc~u Л d *_1)). (23.5)

у у i fc kj K

После этого C* = D(n\

Формула (23.5) отражает то, что путь из i -й вершины в j -ю, все промежуточные вершины которого принадлежат {1,2,..., А:}, суще­ствует, если и только если реализуется хотя бы одна из следующих возможностей:

• имеется путь из i -й вершины в j -ю, все промежуточные вершины которого принадлежат {1, 2, ...,к - 1};


§ 23. Булева арифметика



• имеются пути из i -й вершины в k -ю и из k -й в j -ю, все промежу­точные вершины которых принадлежат {1, 2,..., k - 1}.

На вычисление D (0) уходит n битовых операций, вычисление каж­дой из матриц D(k ), 1^k^n, требует 2n2 операций. Итого, требуется 2 n 3 + n операций.

Алгоритм Уоршелла вычисляет матрицу C*, т. е. строит транзи-тивно-рефлексивное замыкание ориентированного графа G с n верши­нами, заданного матрицей смежности, затрачивая 2 n 3 + n битовых операций.

Алгоритм Уоршелла можно легко реализовать так, что храниться в памяти будут только D ( k -1) и D ( k ). Но на самом деле алгоритм Уор­шелла позволяет производить все вычисления, расходуя всего n2 би­тов под хранение матричных элементов. Если мы вычислим D = I V C, а затем n раз обновим матрицу D (каждый раз всю целиком, не оставляя незатронутых элементов), используя на k -м этапе обновле­ния матрицы D присваивания

dij:= dij V(dik A dkj),

k = 1,2,...n, то получим искомую матрицу связности. В самом деле, индукцией по k можно доказать, что после k -го этапа обновления по­лучаем матрицу, равную D ( k ), при этом индуктивный переход от k - 1 к k основывается на том, что имеют место очевидные соотношения

dik dik, dkj dkj

k = 1, 2,..., n, т.е. при обновлении элемента dij на k -м этапе не име­ет никакого значения, был ли уже обновлен какой-то из элементов dik, dkj или нет.

Если строить матрицу C * на месте исходной матрицы C, то алго­ритм можно изобразить так:

for l = 1 to n do cll:=1 od; for k =1 to n do for i = 1 to n do for j = 1 to n do

cij:= cij V(cik A ckj) od od od

Подводя итог рассмотрению алгоритма Уоршелла, заметим, что, как и алгоритм Евклида в расширенной версии, он дает довольно



Глава 5. Битовая сложность


редкий пример, когда низкие временные затраты сочетаются с малым расходом памяти.

Алгоритм Уоршелла построения замыкания ориентированного графа имеет битовую временную сложность 2 n 3 + n, где n = \ V \ — чис­ло вершин графа. Пространственная сложность этого алгоритма ограничена константой.

При рассмотрении | V |, | E | в качестве двух параметров размера входа сказанное сохраняет силу, так как затраты алгоритма Уоршелла не зависят от числа ребер заданного входного графа.




Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 1319; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.025 сек.