Изменения

Перейти к: навигация, поиск

Участник:Zerogerc

1795 байт добавлено, 09:24, 16 мая 2017
Алгоритм
==Примеры рандомизированных алгоритмов==
 
===Позиция числа в массиве===
====Задача====
Задан массив <tex>A</tex> в котором половина чисел единицы, а половина нули. Найти позицию какой-нибудь единицы.
 
====Алгоритм====
Выбираем случайную позицию и проверяем стоит ли на этой позиции единица. Если да то берем если нет про продолжаем пока не найдем. Ассимптотика {{---}} <tex>\lim\limits_{n \to \infty}\sum\limits_{i=1}^n \frac{i}{2^i} = 2</tex>
 
Хоть у этого алгоритма такая же ассимптотика как и у детерминированного алгоритма, который просто начиная с первой позиции перебирает все числа, у рандомизированного алгоритма есть приемущество. Для детерминированного алгоритма можно подобрать такой вход на котором он будет гарантированно работать плохо. А для рандомизированного нельзя.
===Проверка числа на простоту ===
Дано целое число <tex>N</tex>. Определить является ли оно простым.
====Алгоритм====
Нам нужен детерминированный Существует эффективный рандомизированный алгоритм работающий за <tex>p(\log|n|)</tex>, где <tex>p</tex> {{---}} полином. Хоть и В то время как не существует такого эффективного детерминированного алгоритма, существует эффективный рандомизированный алгоритмс такой же ассимптотикой.
Формально, нам нужно проверить принадлежит ли число языку <tex>PRIMES = \{ \llcorner N \lrcorner : N -</tex> простое <tex>\}</tex>. Предоставим алгоритм который покажет что <tex>PRIMES \in BPP</tex>. Для каждого <tex>N</tex> и <tex>A \in [1 .. N - 1]</tex>, определим символ Лежандра:
</tex>
{{---}} Для каждого нечетного простого <tex>N</tex> и <tex>A \in [1 0\,.. \,N - 1], QR_N</tex> определим симол Якоби <tex>(\frac{N}{A}) </tex> как <tex>\prod\limits_{i= A1}^k QR_{P(i)}(A)</tex>, где <tex>P_1, ... , P_k</tex> это простые делители (не обязательно различные) числа <tex>N (N = \fracprod\limits_{N - i=1}{2}} ^k P_i)</tex>. Cуществует алгоритм для вычисления символа Якоби за <tex>O(mod logA \ Ncdot logN)</tex> {{---}} формула Лежандра. Можно посмотреть на [https://en.wikipedia.org/wiki/Jacobi_symbol википедии] 
{{---}} Для каждого нечетного простого <tex>N, A</tex> определим симол Якоби и <tex>(\frac{N}{A})</tex> как <tex>\prod\limits_{i=in [1}^k QR_{P(i)}(A)</tex>, где <tex>P_1, ... , P_kN - 1]</tex> это простые делители (не обязательно различные) числа выполняется: <tex>N QR_N(N A) = A^{\prod\limits_frac{i=N - 1}^k P_i)</tex>. Cуществует алгоритм для вычисления символа Якоби за <tex>O{2}} (logA mod \cdot logNN)</tex>. Можно посмотреть на [https://en.wikipedia.org/wiki/Jacobi_symbol википедии]{{---}} формула Лежандра
{{---}} Для Также доказано что для каждого нечетного составного <tex>N, |\{A \in [1\,..\,N - 1]: gcd(N, A) = 1 \ \land \ </tex> и <tex>(\frac{N}{A}) = A^{\frac{N - 1}{2}}(mod \ N)\}| \le \frac{1N}{2}</tex> <tex>\,| \{A \in [N - 1]: gcd(N, A) = 1\}|</tex>
* [https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8 Символ Якоби]
* [https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB_%D0%9B%D0%B5%D0%B6%D0%B0%D0%BD%D0%B4%D1%80%D0%B0 Символ Лежандра]
* [https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB Теорема о распределении простых чисел]
* [https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%A1%D0%BE%D0%BB%D0%BE%D0%B2%D0%B5%D1%8F_%E2%80%94_%D0%A8%D1%82%D1%80%D0%B0%D1%81%D1%81%D0%B5%D0%BD%D0%B0 Тест Соловея — Штрассена]
[[Категория: Теория сложности]]
63
правки

Навигация