Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
3. Сложность теоретико-числовых алгоритмовСложность алгоритмов теории чисел обычно принято измерять количеством арифметических операций (сложений, вычитаний, умножений и делений с остатком), необходимых для выполнения всех действий, предписанных алгоритмом. Впрочем, это определение не учитывает величины чисел, участвующих в вычислениях. Ясно, что перемножить два стозначных числа значительно сложнее, чем два однозначных, хотя при этом и в том, и в другом случае выполняется лишь одна арифметическая операция. Поэтому иногда учитывают еще и величину чисел, сводя дело к так называемым битовым операциям, т. е. оценивая количество необходимых операций с цифрами 0 и 1, в двоичной записи чисел. Это зависит от рассматриваемой задачи, от целей автора и т. д. На первый взгляд странным также кажется, что операции умножения и деления приравниваются по сложности к операциям сложения и вычитания. Житейский опыт подсказывает, что умножать числа значительно сложнее, чем складывать их. В действительности же, вычисления можно организовать так, что на умножение или деление больших чисел понадобится не намного больше битовых операций, чем на сложение. В книге [7] описывается алгоритм Шёнхаге - Штрассена, основанный на так называемом быстром преобразовании Фурье, и требующий Говоря в этой статье о сложности алгоритмов, мы будем иметь в виду количество арифметических операций. При построении эффективных алгоритмов и обсуждении верхних оценок сложности обычно хватает интуитивных понятий той области математики, которой принадлежит алгоритм. Формализация же этих понятий требуется лишь тогда, когда речь идет об отсутствии алгоритма или доказательстве нижних оценок сложности. Более детальное и формальное обсуждение этих вопросов см. в главе 2. Приведем теперь примеры достаточно быстрых алгоритмов с оценками их сложности. Здесь и в дальнейшем мы не будем придерживаться формального описания алгоритмов, стараясь в первую очередь объяснить смысл выполняемых действий. Следующий алгоритм вычисляет 1. Алгоритм вычисления a^d (mod m)1. Представим 2. Положим
Справедливость этого алгоритма вытекает из сравнения
легко доказываемого индукцией по Так как каждое вычисление на шаге 2 требует не более трех умножений по модулю Второй алгоритм — это классический алгоритм Евклида вычисления наибольшего общего делителя целых чисел. Мы предполагаем заданными два натуральных числа 2. Алгоритм Евклида1. Вычислим 2. Если 3. Если Не останавливаясь на объяснении, почему алгоритм действительно находит Доказательство. Положим
Пусть также Немного подправив алгоритм Евклида, можно достаточно быстро решать сравнения 3. Алгоритм решения уравнения ах + by = 10. Определим матрицу 1. Вычислим 2. Если 3. Если Если обозначить через то в обозначениях из доказательства теоремы 1 в этот момент выполняется векторное равенство Три приведенных выше алгоритма относятся к разряду так называемых полиномиальных алгоритмов. Это название носят алгоритмы, сложность которых оценивается сверху степенным образом в зависимости от длины записи входящих чисел (см. подробности в главе 2). Если наибольшее из чисел, подаваемых на вход алгоритма, не превосходит Полиномиальные алгоритмы в теории чисел — большая редкость. Да и оценки сложности алгоритмов чаще всего опираются на какие-либо не доказанные, но правдоподобные гипотезы, обычно относящиеся к аналитической теории чисел. Для некоторых задач эффективные алгоритмы вообще не известны. Иногда в таких случаях все же можно предложить последовательность действий, которая, «если повезет», быстро приводит к требуемому результату. Существует класс так называемых вероятностных алгоритмов, которые дают правильный результат, но имеют вероятностную оценку времени работы. Обычно работа этих алгоритмов зависит от одного или нескольких параметров. В худшем случае они работают достаточно долго. Но удачный выбор параметра определяет быстрое завершение работы. Такие алгоритмы, если множество «хороших» значений параметров велико, на практике работают достаточно эффективно, хотя и не имеют хороших оценок сложности. Мы будем иногда использовать слова детерминированный алгоритм, чтобы отличать алгоритмы в обычном смысле от вероятностных алгоритмов. Как пример, рассмотрим вероятностный алгоритм, позволяющий эффективно находить решения полиномиальных сравнений по простому модулю. Пусть
Например, речь может идти о решении квадратичных сравнений, если степень многочлена Согласно малой теореме Ферма, все элементы поля Для вычисления многочлена Таким образом, обсуждая далее задачу нахождения решений сравнения (8), мы можем предполагать, что в кольце многочленов
4. Алгоритм нахождения делителей многочлена f(x) в кольце Fp[x]1. Выберем каким-либо способом элемент 2. Вычислим наибольший общий делитель
3. Если многочлен 4. Если окажется, что Количество операций на шаге 2 оценивается величиной Количество решений уравнения
состоит не менее, чем из либо Итак, существует не менее «удачных» выборов элемента 6, при которых на шаге 2 алгоритма многочлен Заметим, что при оценке вероятности мы использовали только два корня многочлена В книге [6] описывается принадлежащий Берлекэмпу детерминированный алгоритм решения сравнения (8), требующий Если в сравнении (8) заменить простой модуль
|
1 |
Оглавление
|