1. с/к “Эффективные алгоритмы”
Лекция 7: Вероятностные алгоритмы
А. Куликов
Computer Science клуб при ПОМИ
http://logic.pdmi.ras.ru/∼infclub/
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 1 / 30
2. План лекции
1 Минимальный разрез
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 2 / 30
3. План лекции
1 Минимальный разрез
2 Проверка простоты числа
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 2 / 30
4. План лекции
1 Минимальный разрез
2 Проверка простоты числа
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 3 / 30
5. Минимальный разрез
Определение
Задача о минимальном разрезе (min-cut problem) заключается в
нахождении по данному связному мультиграфу такого минимального
количества ребер, удаление которых делает граф несвязным.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 4 / 30
6. Минимальный разрез
Определение
Задача о минимальном разрезе (min-cut problem) заключается в
нахождении по данному связному мультиграфу такого минимального
количества ребер, удаление которых делает граф несвязным.
Алгоритм
Rand-Min-Cut(G )
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 4 / 30
7. Минимальный разрез
Определение
Задача о минимальном разрезе (min-cut problem) заключается в
нахождении по данному связному мультиграфу такого минимального
количества ребер, удаление которых делает граф несвязным.
Алгоритм
Rand-Min-Cut(G )
повторять, пока в G более двух вершин:
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 4 / 30
8. Минимальный разрез
Определение
Задача о минимальном разрезе (min-cut problem) заключается в
нахождении по данному связному мультиграфу такого минимального
количества ребер, удаление которых делает граф несвязным.
Алгоритм
Rand-Min-Cut(G )
повторять, пока в G более двух вершин:
выбрать случайное ребро (u, v )
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 4 / 30
9. Минимальный разрез
Определение
Задача о минимальном разрезе (min-cut problem) заключается в
нахождении по данному связному мультиграфу такого минимального
количества ребер, удаление которых делает граф несвязным.
Алгоритм
Rand-Min-Cut(G )
повторять, пока в G более двух вершин:
выбрать случайное ребро (u, v )
удалить все ребра между u и v
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 4 / 30
10. Минимальный разрез
Определение
Задача о минимальном разрезе (min-cut problem) заключается в
нахождении по данному связному мультиграфу такого минимального
количества ребер, удаление которых делает граф несвязным.
Алгоритм
Rand-Min-Cut(G )
повторять, пока в G более двух вершин:
выбрать случайное ребро (u, v )
удалить все ребра между u и v
стянуть u и v в одну
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 4 / 30
11. Минимальный разрез
Определение
Задача о минимальном разрезе (min-cut problem) заключается в
нахождении по данному связному мультиграфу такого минимального
количества ребер, удаление которых делает граф несвязным.
Алгоритм
Rand-Min-Cut(G )
повторять, пока в G более двух вершин:
выбрать случайное ребро (u, v )
удалить все ребра между u и v
стянуть u и v в одну
вернуть количество ребер между двумя оставшимися вершинами
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 4 / 30
14. Анализ алгоритма
Анализ алгоритма
Заметим, что стягивание не уменьшает размера минимального
разреза: любой разрез в графе со стянутыми вершинами является
разрезом и в исходном графе.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 6 / 30
15. Анализ алгоритма
Анализ алгоритма
Заметим, что стягивание не уменьшает размера минимального
разреза: любой разрез в графе со стянутыми вершинами является
разрезом и в исходном графе.
Если минимальный размер разреза графа G равен k, то в графе
G хотя бы kn/2 ребер: степень каждой вершины хотя бы k.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 6 / 30
16. Анализ алгоритма
Анализ алгоритма
Заметим, что стягивание не уменьшает размера минимального
разреза: любой разрез в графе со стянутыми вершинами является
разрезом и в исходном графе.
Если минимальный размер разреза графа G равен k, то в графе
G хотя бы kn/2 ребер: степень каждой вершины хотя бы k.
Пусть C — минимальный разрез графа размера k.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 6 / 30
17. Анализ алгоритма
Анализ алгоритма
Заметим, что стягивание не уменьшает размера минимального
разреза: любой разрез в графе со стянутыми вершинами является
разрезом и в исходном графе.
Если минимальный размер разреза графа G равен k, то в графе
G хотя бы kn/2 ребер: степень каждой вершины хотя бы k.
Пусть C — минимальный разрез графа размера k.
Обозначим событие “ребро из C не было выбрано на шаге i”
через Ai .
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 6 / 30
18. Анализ алгоритма
Анализ алгоритма
Заметим, что стягивание не уменьшает размера минимального
разреза: любой разрез в графе со стянутыми вершинами является
разрезом и в исходном графе.
Если минимальный размер разреза графа G равен k, то в графе
G хотя бы kn/2 ребер: степень каждой вершины хотя бы k.
Пусть C — минимальный разрез графа размера k.
Обозначим событие “ребро из C не было выбрано на шаге i”
через Ai .
Тогда Prob (алгоритм выдаст C ) = Prob (A1 ∩ A2 ∩ · · · ∩ An−2 ) .
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 6 / 30
20. Анализ алгоритма (продолжение)
Анализ алгоритма
|C | k 2
Prob (A1 ) ≥ 1 − |E | ≥1− kn/2 =1− n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 7 / 30
21. Анализ алгоритма (продолжение)
Анализ алгоритма
|C | k 2
Prob (A1 ) ≥ 1 − |E | ≥1− kn/2 =1− n
После первого шага остается n − 1 вершин и хотя бы k(n − 1)/2
ребер.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 7 / 30
22. Анализ алгоритма (продолжение)
Анализ алгоритма
|C | k 2
Prob (A1 ) ≥ 1 − |E | ≥1− kn/2 =1− n
После первого шага остается n − 1 вершин и хотя бы k(n − 1)/2
ребер.
2
Prob (A2 |A1 ) ≥ 1 − n−1
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 7 / 30
23. Анализ алгоритма (продолжение)
Анализ алгоритма
|C | k 2
Prob (A1 ) ≥ 1 − |E | ≥1− kn/2 =1− n
После первого шага остается n − 1 вершин и хотя бы k(n − 1)/2
ребер.
2
Prob (A2 |A1 ) ≥ 1 − n−1
На i-ом шаге в графе есть n − (i − 1) вершин, размер
минимального разреза хотя бы k, поэтому ребер в графе хотя бы
k(n − i + 1)/2.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 7 / 30
24. Анализ алгоритма (продолжение)
Анализ алгоритма
|C | k 2
Prob (A1 ) ≥ 1 − |E | ≥1− kn/2 =1− n
После первого шага остается n − 1 вершин и хотя бы k(n − 1)/2
ребер.
2
Prob (A2 |A1 ) ≥ 1 − n−1
На i-ом шаге в графе есть n − (i − 1) вершин, размер
минимального разреза хотя бы k, поэтому ребер в графе хотя бы
k(n − i + 1)/2.
⃒ ⎛⎞
⃒i−1
⃒ ⋂︁ 2
Prob ⎝Ai ⃒ Aj ⎠ ≥ 1 −
⃒
⃒j=1 n−i +1
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 7 / 30
26. Анализ алгоритма (продолжение)
Анализ алгоритма
⎛ ⎞ ⎛ ⎞
n−2
⋂︁ n−3
⋂︁
Prob ⎝ Aj ⎠ = Prob (A1 )·Prob (A2 |A1 )·. . .·Prob ⎝An−2 | Aj ⎠
j=1 j=1
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 8 / 30
27. Анализ алгоритма (продолжение)
Анализ алгоритма
⎛ ⎞ ⎛ ⎞
n−2
⋂︁ n−3
⋂︁
Prob ⎝ Aj ⎠ = Prob (A1 )·Prob (A2 |A1 )·. . .·Prob ⎝An−2 | Aj ⎠
j=1 j=1
Итак, алгоритм выдает разрез C с вероятностью хотя бы
n−2 (︂ )︂
∏︁ 2 2
1− = .
n−i +1 n(n − 1)
i=1
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 8 / 30
28. Анализ алгоритма (продолжение)
Лемма
Алгоритм Rand-Min-Cut выдает каждое минимальное сечение
2
графа с вероятностью хотя бы n(n−1) . Время работы алгоритма —
O(n2 ).
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 9 / 30
30. Улучшение алгоритма
Улучшение алгоритма
Таким образом, чтобы получить константную вероятность
ошибки, придется запустить этот алгоритм O(n2 ) раз, что
приведет ко времени работы O(n4 ).
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 10 / 30
31. Улучшение алгоритма
Улучшение алгоритма
Таким образом, чтобы получить константную вероятность
ошибки, придется запустить этот алгоритм O(n2 ) раз, что
приведет ко времени работы O(n4 ).
Как можно улучшить алгоритм?
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 10 / 30
32. Улучшение алгоритма
Улучшение алгоритма
Таким образом, чтобы получить константную вероятность
ошибки, придется запустить этот алгоритм O(n2 ) раз, что
приведет ко времени работы O(n4 ).
Как можно улучшить алгоритм?
Как мы уже видели, на i-ом шаге алгоритм не выбирает ребро из
2
зафиксированного покрытия с вероятностью 1 − n−i+1 .
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 10 / 30
33. Улучшение алгоритма
Улучшение алгоритма
Таким образом, чтобы получить константную вероятность
ошибки, придется запустить этот алгоритм O(n2 ) раз, что
приведет ко времени работы O(n4 ).
Как можно улучшить алгоритм?
Как мы уже видели, на i-ом шаге алгоритм не выбирает ребро из
2
зафиксированного покрытия с вероятностью 1 − n−i+1 .
С увеличением i данная вероятность убывает.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 10 / 30
34. Улучшение алгоритма
Улучшение алгоритма
Таким образом, чтобы получить константную вероятность
ошибки, придется запустить этот алгоритм O(n2 ) раз, что
приведет ко времени работы O(n4 ).
Как можно улучшить алгоритм?
Как мы уже видели, на i-ом шаге алгоритм не выбирает ребро из
2
зафиксированного покрытия с вероятностью 1 − n−i+1 .
С увеличением i данная вероятность убывает.
Идея: будем стягивать вершины, только пока соответствующая
вероятность достаточно хороша.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 10 / 30
38. Улучшенный алгоритм
Алгоритм
Improved-Rand-Min-Cut(G )
√
t = n/ 2
стягиванием случайных ребер получить два графа H1 и H2 на t
вершинах
k1 = Improved-Rand-Min-Cut(H1 )
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 11 / 30
39. Улучшенный алгоритм
Алгоритм
Improved-Rand-Min-Cut(G )
√
t = n/ 2
стягиванием случайных ребер получить два графа H1 и H2 на t
вершинах
k1 = Improved-Rand-Min-Cut(H1 )
k2 = Improved-Rand-Min-Cut(H2 )
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 11 / 30
40. Улучшенный алгоритм
Алгоритм
Improved-Rand-Min-Cut(G )
√
t = n/ 2
стягиванием случайных ребер получить два графа H1 и H2 на t
вершинах
k1 = Improved-Rand-Min-Cut(H1 )
k2 = Improved-Rand-Min-Cut(H2 )
вернуть min{k1 , k2 }
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 11 / 30
41. Анализ времени работы
Лемма
Время работы алгоритма Improved-Rand-Min-Cut — O(n2 log n).
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 12 / 30
42. Анализ времени работы
Лемма
Время работы алгоритма Improved-Rand-Min-Cut — O(n2 log n).
Доказательство
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 12 / 30
43. Анализ времени работы
Лемма
Время работы алгоритма Improved-Rand-Min-Cut — O(n2 log n).
Доказательство
(︂ )︂
n
T (n) = 2T √ + O(n2 )
2
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 12 / 30
44. Анализ времени работы
Лемма
Время работы алгоритма Improved-Rand-Min-Cut — O(n2 log n).
Доказательство
(︂ )︂
n
T (n) = 2T √ + O(n2 )
2
T (n) = O(n2 log n)
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 12 / 30
45. Оценка вероятности ошибки
Лемма
Алгоритм Improved-Rand-Min-Cut выдает минимальный разрез
графа с вероятностью Ω(1/ log n).
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 13 / 30
46. Оценка вероятности ошибки
Лемма
Алгоритм Improved-Rand-Min-Cut выдает минимальный разрез
графа с вероятностью Ω(1/ log n).
Доказательство
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 13 / 30
47. Оценка вероятности ошибки
Лемма
Алгоритм Improved-Rand-Min-Cut выдает минимальный разрез
графа с вероятностью Ω(1/ log n).
Доказательство
Допустим, разрез размера k все еще существует в графе H на t
вершинах.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 13 / 30
48. Оценка вероятности ошибки
Лемма
Алгоритм Improved-Rand-Min-Cut выдает минимальный разрез
графа с вероятностью Ω(1/ log n).
Доказательство
Допустим, разрез размера k все еще существует в графе H на t
вершинах.
Алгоритм вернет этот разрез, если для какого-то из двух графов
H1 и H2 ни одно ребро этого разреза не будет стянуто и
соответствующий рекурсивный вызов вернет именно этот разрез.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 13 / 30
49. Оценка вероятности ошибки
Лемма
Алгоритм Improved-Rand-Min-Cut выдает минимальный разрез
графа с вероятностью Ω(1/ log n).
Доказательство
Допустим, разрез размера k все еще существует в графе H на t
вершинах.
Алгоритм вернет этот разрез, если для какого-то из двух графов
H1 и H2 ни одно ребро этого разреза не будет стянуто и
соответствующий рекурсивный вызов вернет именно этот разрез.
√
При стягивании t вершин в t/ 2 вероятность того, что ни одно
ребро разреза стянуто не будет, хотя бы
√ √
t/ 2(t/ 2 − 1) 1
≥ .
t(t − 1) 2
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 13 / 30
51. Доказательство (продолжение)
Доказательство
Обозначим через P(t) вероятность того, что алгоритм находит
минимальный разрез графа на t вершинах.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 14 / 30
52. Доказательство (продолжение)
Доказательство
Обозначим через P(t) вероятность того, что алгоритм находит
минимальный разрез графа на t вершинах.
(︂ (︂ )︂)︂2
1 t
P(t) ≥ 1 − 1 − P √
2 2
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 14 / 30
53. Доказательство (продолжение)
Доказательство
Обозначим через P(t) вероятность того, что алгоритм находит
минимальный разрез графа на t вершинах.
(︂ (︂ )︂)︂2
1 t
P(t) ≥ 1 − 1 − P √
2 2
Нетрудно проверить, что P(t) = Θ( 1 ) является решением.
t
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 14 / 30
54. План лекции
1 Минимальный разрез
2 Проверка простоты числа
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 15 / 30
56. Проверка простоты числа
Проверка простоты числа
Как найти большое простое число?
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 16 / 30
57. Проверка простоты числа
Проверка простоты числа
Как найти большое простое число?
Можно, например, выбрать случайное число n и проверить,
является ли оно простым.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 16 / 30
58. Проверка простоты числа
Проверка простоты числа
Как найти большое простое число?
Можно, например, выбрать случайное число n и проверить,
является ли оно простым.
Но как эффективно проверять?
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 16 / 30
59. Проверка простоты числа
Проверка простоты числа
Как найти большое простое число?
Можно, например, выбрать случайное число n и проверить,
является ли оно простым.
Но как эффективно проверять?
√
Можно перебрать все возможные делители от 2 до n, но это
√
займет экспоненицальное время от размера входа: n = 2log2 n/2 .
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 16 / 30
60. Проверка простоты числа
Проверка простоты числа
Как найти большое простое число?
Можно, например, выбрать случайное число n и проверить,
является ли оно простым.
Но как эффективно проверять?
√
Можно перебрать все возможные делители от 2 до n, но это
√
займет экспоненицальное время от размера входа: n = 2log2 n/2 .
Мы предъявим полиномиальный вероятностный алгоритм.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 16 / 30
62. Факты
Факты
Известен детерминированный полиномиальный алгоритм
проверки числа на простоту.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 17 / 30
63. Факты
Факты
Известен детерминированный полиномиальный алгоритм
проверки числа на простоту.
Однако нет ни одного известного полиномиального алгоритма
разложения числа на множители.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 17 / 30
64. Факты
Факты
Известен детерминированный полиномиальный алгоритм
проверки числа на простоту.
Однако нет ни одного известного полиномиального алгоритма
разложения числа на множители.
Самое больше известное (на данный момент) простое число:
33 661 · 27 031 232 + 1.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 17 / 30
65. Факты
Факты
Известен детерминированный полиномиальный алгоритм
проверки числа на простоту.
Однако нет ни одного известного полиномиального алгоритма
разложения числа на множители.
Самое больше известное (на данный момент) простое число:
33 661 · 27 031 232 + 1.
В его десятичной записи 2 116 617 цифр.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 17 / 30
67. Малая теорема Ферма
Определение
Z+ = {1, 2, . . . , n − 1} — множество всех ненулевых вычетов
n
(остатков) по модулю n.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 18 / 30
68. Малая теорема Ферма
Определение
Z+ = {1, 2, . . . , n − 1} — множество всех ненулевых вычетов
n
(остатков) по модулю n.
Z* — множество остатков, взаимно простых с n (для простого n
n
Z+ = Z* ).
n n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 18 / 30
69. Малая теорема Ферма
Определение
Z+ = {1, 2, . . . , n − 1} — множество всех ненулевых вычетов
n
(остатков) по модулю n.
Z* — множество остатков, взаимно простых с n (для простого n
n
Z+ = Z* ).
n n
Теорема
Если p ∈ P и (a, p) = 1, то
ap−1 ≡ 1 mod .
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 18 / 30
70. Малая теорема Ферма
Определение
Z+ = {1, 2, . . . , n − 1} — множество всех ненулевых вычетов
n
(остатков) по модулю n.
Z* — множество остатков, взаимно простых с n (для простого n
n
Z+ = Z* ).
n n
Теорема
Если p ∈ P и (a, p) = 1, то
ap−1 ≡ 1 mod .
Определение
Число n называется псевдопростым по основанию a (base-a
pseudoprime), если an−1 ≡ 1 mod n.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 18 / 30
73. Простой тест
Простой тест
Pseudoprime(n)
если 2n−1 ̸≡ 1 mod n, вернуть “составное”
вернуть “простое”
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 19 / 30
74. Простой тест
Простой тест
Pseudoprime(n)
если 2n−1 ̸≡ 1 mod n, вернуть “составное”
вернуть “простое”
Анализ
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 19 / 30
75. Простой тест
Простой тест
Pseudoprime(n)
если 2n−1 ̸≡ 1 mod n, вернуть “составное”
вернуть “простое”
Анализ
Существуют составные числа, которые данный тест не распознает.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 19 / 30
76. Простой тест
Простой тест
Pseudoprime(n)
если 2n−1 ̸≡ 1 mod n, вернуть “составное”
вернуть “простое”
Анализ
Существуют составные числа, которые данный тест не распознает.
Таких чисел довольно мало, но все же.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 19 / 30
77. Простой тест
Простой тест
Pseudoprime(n)
если 2n−1 ̸≡ 1 mod n, вернуть “составное”
вернуть “простое”
Анализ
Существуют составные числа, которые данный тест не распознает.
Таких чисел довольно мало, но все же.
Можно проверять другие основания, но и это не поможет:
существуют числа n, псевдопростые по любому основанию a ∈ Z* .
n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 19 / 30
79. Улучшение теста
Улучшение теста
Будем проверять несколько оснований.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 20 / 30
80. Улучшение теста
Улучшение теста
Будем проверять несколько оснований.
Вычисляя an−1 , будем проверять, не нашлось ли такого x ≤ n, что
x 2 ≡ 1 mod n:
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 20 / 30
81. Улучшение теста
Улучшение теста
Будем проверять несколько оснований.
Вычисляя an−1 , будем проверять, не нашлось ли такого x ≤ n, что
x 2 ≡ 1 mod n:
.
если x 2 ≡ 1 mod n, то (x − 1)(x + 1). тогда если n ∈ P, то x
.n,
равен 1 или n − 1.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 20 / 30
82. Возведение в степень с прокеркой
Возведение в степень с проверкой
Witness(a, n)
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 21 / 30
83. Возведение в степень с прокеркой
Возведение в степень с проверкой
Witness(a, n)
пусть ⟨bk , bk−1 , . . . , b0 ⟩ — двоичная запись n − 1
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 21 / 30
84. Возведение в степень с прокеркой
Возведение в степень с проверкой
Witness(a, n)
пусть ⟨bk , bk−1 , . . . , b0 ⟩ — двоичная запись n − 1
d =1
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 21 / 30
85. Возведение в степень с прокеркой
Возведение в степень с проверкой
Witness(a, n)
пусть ⟨bk , bk−1 , . . . , b0 ⟩ — двоичная запись n − 1
d =1
для i от k до 0 повторять:
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 21 / 30
86. Возведение в степень с прокеркой
Возведение в степень с проверкой
Witness(a, n)
пусть ⟨bk , bk−1 , . . . , b0 ⟩ — двоичная запись n − 1
d =1
для i от k до 0 повторять:
x =d
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 21 / 30
87. Возведение в степень с прокеркой
Возведение в степень с проверкой
Witness(a, n)
пусть ⟨bk , bk−1 , . . . , b0 ⟩ — двоичная запись n − 1
d =1
для i от k до 0 повторять:
x =d
d = d 2 mod n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 21 / 30
88. Возведение в степень с прокеркой
Возведение в степень с проверкой
Witness(a, n)
пусть ⟨bk , bk−1 , . . . , b0 ⟩ — двоичная запись n − 1
d =1
для i от k до 0 повторять:
x =d
d = d 2 mod n
если d = 1 и x ̸= 1 и x ̸= n − 1, вернуть “составное”
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 21 / 30
89. Возведение в степень с прокеркой
Возведение в степень с проверкой
Witness(a, n)
пусть ⟨bk , bk−1 , . . . , b0 ⟩ — двоичная запись n − 1
d =1
для i от k до 0 повторять:
x =d
d = d 2 mod n
если d = 1 и x ̸= 1 и x ̸= n − 1, вернуть “составное”
если bi = 1, d = (d · a) mod n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 21 / 30
90. Возведение в степень с прокеркой
Возведение в степень с проверкой
Witness(a, n)
пусть ⟨bk , bk−1 , . . . , b0 ⟩ — двоичная запись n − 1
d =1
для i от k до 0 повторять:
x =d
d = d 2 mod n
если d = 1 и x ̸= 1 и x ̸= n − 1, вернуть “составное”
если bi = 1, d = (d · a) mod n
если d ̸= 1, вернуть “составное”
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 21 / 30
91. Возведение в степень с прокеркой
Возведение в степень с проверкой
Witness(a, n)
пусть ⟨bk , bk−1 , . . . , b0 ⟩ — двоичная запись n − 1
d =1
для i от k до 0 повторять:
x =d
d = d 2 mod n
если d = 1 и x ̸= 1 и x ̸= n − 1, вернуть “составное”
если bi = 1, d = (d · a) mod n
если d ̸= 1, вернуть “составное”
вернуть “простое”
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 21 / 30
94. Алгоритм
Алгоритм
Prime(n, s)
повторить s раз
выбрать случайное основание a от 1 до n − 1
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 22 / 30
95. Алгоритм
Алгоритм
Prime(n, s)
повторить s раз
выбрать случайное основание a от 1 до n − 1
если Witness(a, n) вернул “составное”, вернуть “составное”
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 22 / 30
96. Алгоритм
Алгоритм
Prime(n, s)
повторить s раз
выбрать случайное основание a от 1 до n − 1
если Witness(a, n) вернул “составное”, вернуть “составное”
вернуть “простое”
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 22 / 30
97. Алгоритм
Алгоритм
Prime(n, s)
повторить s раз
выбрать случайное основание a от 1 до n − 1
если Witness(a, n) вернул “составное”, вернуть “составное”
вернуть “простое”
Время работы алгоритма
Возведение в степень требует log n операций.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 22 / 30
98. Основная теорема
Теорема
Для нечетного составного числа n
n−1
|{a ∈ Z+ : Witness(a, n) = “составное”}| ≥
n .
2
Идея доказательства
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 23 / 30
99. Основная теорема
Теорема
Для нечетного составного числа n
n−1
|{a ∈ Z+ : Witness(a, n) = “составное”}| ≥
n .
2
Идея доказательства
Назовем основание a ∈ Z+ плохим, если
n
Witness(a, n) = “простое”.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 23 / 30
100. Основная теорема
Теорема
Для нечетного составного числа n
n−1
|{a ∈ Z+ : Witness(a, n) = “составное”}| ≥
n .
2
Идея доказательства
Назовем основание a ∈ Z+ плохим, если
n
Witness(a, n) = “простое”.
Поскольку для плохого a выполнено an−1 ≡ 1 mod n, все плохие
элементы лежат в Z* .
n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 23 / 30
101. Основная теорема
Теорема
Для нечетного составного числа n
n−1
|{a ∈ Z+ : Witness(a, n) = “составное”}| ≥
n .
2
Идея доказательства
Назовем основание a ∈ Z+ плохим, если
n
Witness(a, n) = “простое”.
Поскольку для плохого a выполнено an−1 ≡ 1 mod n, все плохие
элементы лежат в Z* .
n
Мы хотим показать, что плохих оснований меньше половины.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 23 / 30
102. Основная теорема
Теорема
Для нечетного составного числа n
n−1
|{a ∈ Z+ : Witness(a, n) = “составное”}| ≥
n .
2
Идея доказательства
Назовем основание a ∈ Z+ плохим, если
n
Witness(a, n) = “простое”.
Поскольку для плохого a выполнено an−1 ≡ 1 mod n, все плохие
элементы лежат в Z* .
n
Мы хотим показать, что плохих оснований меньше половины.
Для этого покажем, что все плохие элементы образуют
собственную подгруппу Z* .
n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 23 / 30
104. Простой случай
Простой случай
Предположим, существует x ∈ Z* , такой что x n−1 ̸≡ 1 mod n.
n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 24 / 30
105. Простой случай
Простой случай
Предположим, существует x ∈ Z* , такой что x n−1 ̸≡ 1 mod n.
n
Рассмотрим тогда B = {b ∈ Z* : bn−1 ≡ 1 mod n}.
n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 24 / 30
106. Простой случай
Простой случай
Предположим, существует x ∈ Z* , такой что x n−1 ̸≡ 1 mod n.
n
Рассмотрим тогда B = {b ∈ Z* : bn−1 ≡ 1 mod n}.
n
Ясно, что B является собственной подгруппой.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 24 / 30
107. Простой случай
Простой случай
Предположим, существует x ∈ Z* , такой что x n−1 ̸≡ 1 mod n.
n
Рассмотрим тогда B = {b ∈ Z* : bn−1 ≡ 1 mod n}.
n
Ясно, что B является собственной подгруппой.
Таким образом, в дальнейшем предполагаем, что для всех x ∈ Z*
n
x n−1 ≡ 1 mod n.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 24 / 30
108. Еще один простой случай
Еще один простой случай
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 25 / 30
109. Еще один простой случай
Еще один простой случай
Предположим, n = p e .
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 25 / 30
110. Еще один простой случай
Еще один простой случай
Предположим, n = p e .
Тогда группа Z* является циклической, то есть существует
n
элемент g , для которого ordn (g ) = |Z* | = ������(n) = (p − 1)p e−1 .
n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 25 / 30
111. Еще один простой случай
Еще один простой случай
Предположим, n = p e .
Тогда группа Z* является циклической, то есть существует
n
элемент g , для которого ordn (g ) = |Z* | = ������(n) = (p − 1)p e−1 .
n
Тогда из g n−1 ≡ 1 mod n следует n − 1 ≡ 0 mod ������(n), но
.
n−1̸. .p.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 25 / 30
112. Еще один простой случай
Еще один простой случай
Предположим, n = p e .
Тогда группа Z* является циклической, то есть существует
n
элемент g , для которого ordn (g ) = |Z* | = ������(n) = (p − 1)p e−1 .
n
Тогда из g n−1 ≡ 1 mod n следует n − 1 ≡ 0 mod ������(n), но
.
n−1̸. .p.
Итак, n представимо в виде произведения двух взаимно простых
чисел n1 , n2 > 1.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 25 / 30
114. Основной случай
Основной случай
Представим число n − 1 как 2t u, где u нечетно.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 26 / 30
115. Основной случай
Основной случай
Представим число n − 1 как 2t u, где u нечетно.
Для каждого a ∈ Z+ рассмотрим последовательность вычетов по
n
модулю n
2 t
^ = ⟨au , a2u , a2 u , . . . , a2 u ⟩.
a
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 26 / 30
116. Основной случай
Основной случай
Представим число n − 1 как 2t u, где u нечетно.
Для каждого a ∈ Z+ рассмотрим последовательность вычетов по
n
модулю n
2 t
^ = ⟨au , a2u , a2 u , . . . , a2 u ⟩.
a
Все эти элементы (кроме первого) важны тем, что они будут
проверены процедурой Witness.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 26 / 30
117. Основной случай
Основной случай
Представим число n − 1 как 2t u, где u нечетно.
Для каждого a ∈ Z+ рассмотрим последовательность вычетов по
n
модулю n
2 t
^ = ⟨au , a2u , a2 u , . . . , a2 u ⟩.
a
Все эти элементы (кроме первого) важны тем, что они будут
проверены процедурой Witness.
Рассмотрим максимальное j, для которого существует такой
j
элемент v ∈ Z* , что v 2 u ≡ −1 mod n (такое j существует,
n
поскольку (−1)u ≡ −1 mod n).
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 26 / 30
118. Основной случай
Основной случай
Представим число n − 1 как 2t u, где u нечетно.
Для каждого a ∈ Z+ рассмотрим последовательность вычетов по
n
модулю n
2 t
^ = ⟨au , a2u , a2 u , . . . , a2 u ⟩.
a
Все эти элементы (кроме первого) важны тем, что они будут
проверены процедурой Witness.
Рассмотрим максимальное j, для которого существует такой
j
элемент v ∈ Z* , что v 2 u ≡ −1 mod n (такое j существует,
n
поскольку (−1)u ≡ −1 mod n).
j
Пусть B = {x ∈ Z* : x 2 u ≡ ±1 mod n}.
n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 26 / 30
119. Основной случай
Основной случай
Представим число n − 1 как 2t u, где u нечетно.
Для каждого a ∈ Z+ рассмотрим последовательность вычетов по
n
модулю n
2 t
^ = ⟨au , a2u , a2 u , . . . , a2 u ⟩.
a
Все эти элементы (кроме первого) важны тем, что они будут
проверены процедурой Witness.
Рассмотрим максимальное j, для которого существует такой
j
элемент v ∈ Z* , что v 2 u ≡ −1 mod n (такое j существует,
n
поскольку (−1)u ≡ −1 mod n).
j
Пусть B = {x ∈ Z* : x 2 u ≡ ±1 mod n}.
n
Ясно, что это подгруппа. Покажем, что в ней лежат все плохие
элементы.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 26 / 30
121. Основной случай (продолжение)
Основной случай
Рассмотрим последовательность ^ плохого элемента a.
a
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 27 / 30
122. Основной случай (продолжение)
Основной случай
Рассмотрим последовательность ^ плохого элемента a.
a
На последнем месте в ней стоит обязательно 1. На
предпоследнем — либо −1, либо 1 (иначе был бы обнаружен
нетривиальный корень из единицы).
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 27 / 30
123. Основной случай (продолжение)
Основной случай
Рассмотрим последовательность ^ плохого элемента a.
a
На последнем месте в ней стоит обязательно 1. На
предпоследнем — либо −1, либо 1 (иначе был бы обнаружен
нетривиальный корень из единицы).
Причем −1 не может стоять правее позиции j.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 27 / 30
124. Основной случай (продолжение)
Основной случай
Рассмотрим последовательность ^ плохого элемента a.
a
На последнем месте в ней стоит обязательно 1. На
предпоследнем — либо −1, либо 1 (иначе был бы обнаружен
нетривиальный корень из единицы).
Причем −1 не может стоять правее позиции j.
Значит, на j-м месте стоит 1 или −1, то есть a ∈ B.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 27 / 30
125. Основной случай (продолжение)
Основной случай
Рассмотрим последовательность ^ плохого элемента a.
a
На последнем месте в ней стоит обязательно 1. На
предпоследнем — либо −1, либо 1 (иначе был бы обнаружен
нетривиальный корень из единицы).
Причем −1 не может стоять правее позиции j.
Значит, на j-м месте стоит 1 или −1, то есть a ∈ B.
Теперь осталось показать, что B — собственная подгруппа, то
есть найти элемент Z* , не содержащийся в B.
n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 27 / 30
128. Завершение доказательства
Завершение доказательства
j
Возьмем элемент v , для которого v 2 u ≡ −1 mod n.
j
Тогда и v 2 u ≡ −1 mod n1 (поскольку n = n1 n2 и (n1 , n2 ) = 1).
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 28 / 30
129. Завершение доказательства
Завершение доказательства
j
Возьмем элемент v , для которого v 2 u ≡ −1 mod n.
j
Тогда и v 2 u ≡ −1 mod n1 (поскольку n = n1 n2 и (n1 , n2 ) = 1).
Существует элемент w , для которого w ≡ v mod n1 и w ≡ 1
mod n2 .
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 28 / 30
130. Завершение доказательства
Завершение доказательства
j
Возьмем элемент v , для которого v 2 u ≡ −1 mod n.
j
Тогда и v 2 u ≡ −1 mod n1 (поскольку n = n1 n2 и (n1 , n2 ) = 1).
Существует элемент w , для которого w ≡ v mod n1 и w ≡ 1
mod n2 .
j j
Тогда w 2 u ≡ −1 mod n1 и w 2 u ≡ 1 mod n2 .
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 28 / 30
131. Завершение доказательства
Завершение доказательства
j
Возьмем элемент v , для которого v 2 u ≡ −1 mod n.
j
Тогда и v 2 u ≡ −1 mod n1 (поскольку n = n1 n2 и (n1 , n2 ) = 1).
Существует элемент w , для которого w ≡ v mod n1 и w ≡ 1
mod n2 .
j j
Тогда w 2 u ≡ −1 mod n1 и w 2 u ≡ 1 mod n2 .
j
Но тогда w 2 u ̸≡ ±1 mod n.
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 28 / 30
132. Завершение доказательства
Завершение доказательства
j
Возьмем элемент v , для которого v 2 u ≡ −1 mod n.
j
Тогда и v 2 u ≡ −1 mod n1 (поскольку n = n1 n2 и (n1 , n2 ) = 1).
Существует элемент w , для которого w ≡ v mod n1 и w ≡ 1
mod n2 .
j j
Тогда w 2 u ≡ −1 mod n1 и w 2 u ≡ 1 mod n2 .
j
Но тогда w 2 u ̸≡ ±1 mod n.
Поскольку (w , n1 ) = 1 и (w , n2 ) = 1, то (w , n) = 1. Следовательно,
w ∈ Z* , но w ̸∈ B.
n
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 28 / 30
133. Что мы узнали за сегодня?
Что мы узнали за сегодня?
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 29 / 30
134. Что мы узнали за сегодня?
Что мы узнали за сегодня?
минимальный разрез выбирать случайное ребро и стягивать его в
вершину
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 29 / 30
135. Что мы узнали за сегодня?
Что мы узнали за сегодня?
минимальный разрез выбирать случайное ребро и стягивать его в
вершину
проверка простоты числа выбирать случайный вычет и проверять, не
являеся ли он свидетелем того, что число составное
А. Куликов (CS клуб при ПОМИ) 7. Вероятностные алгоритмы 29 / 30