Загрузил rodzher.zet

Практика по алгоритмам Вероятностные алгоритмы

Реклама
Первый курс, весенний семестр 2017/18
Практика по алгоритмам #4
Вероятностные алгоритмы
7 февраля
Собрано 13 февраля 2020 г. в 20:36
Содержание
1. Вероятностные алгоритмы
1
2. Разбор задач практики
2
3. Домашнее задание
3.1. Обязательная часть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Дополнительная часть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
6
7
4. Разбор домашнего задания
4.1. Обязательная часть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Дополнительная часть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
8
10
Алгоритмы, весна 2017/18
Практика #4. Вероятностные алгоритмы.
Вероятностные алгоритмы
1. Понижение вероятности
Алгоритм работает за 𝒪(𝑛2 log 𝑛), вероятность успеха 1/ log 𝑛.
За какое время можно добиться вероятности успеха 1 − 1/𝑛?
2. Абсолютно надежный шифр
Шифруем 𝑛-битное сообщение XOR-ом со случайным равномерно распределенным 𝑛-битным
ключом. Покажите, что результат – случайная равномерно распределенная 𝑛-битная строка.
3. Монте-Карло
Посчитать площадь объединения/пересечения 𝑘 = 𝒪(1) кругов с относительной погрешностью 10−2 .
4. Случайный элемент на миллион
Есть длинный файл из 𝑛 элементов, его можно последовательно читать, но не хранить целиком. Требуется в конце вывести один из этих 𝑛 элементов c равной вероятностью.
5. Игра на дереве
Есть полное бинарное дерево глубины 𝑛. В листьях написаны числа 0 и 1. Двое играют в
игру «спуск по дереву», ходят по очереди, первый хочет в 0, второй в 1. Кто выиграет?
Решить за (2 − 𝜀)𝑛 .
6. Random в задачах оптимизации
Пусть у нас есть алгоритм, который ищет VERTEX-COVER.
Матожидание размера покрытия, которое выдаст алгоритм, равно 𝐶 · OPT.
Как получить покрытие, которое с высокой вероятностью будет размера не более 𝐶(1+𝜀)OPT?
7. Приближение MAX-SAT
Для MAX-SAT построить полиномиальный вероятностный алгоритм, ищущий набор переменных, обращающий хотя бы 21 OPT клозов в истину.
8. Числа в окрестности
Дан массив и число 𝜀. Известно, что 2𝑛
элементов массива лежат в [𝑥, 𝑥 + 𝜀] для некоторого
3
неизвестного 𝑥. За линейное время выбрать 𝑛3 элементов из [𝑦, 𝑦 + 𝜀] для некоторого 𝑦.
9. Простое в отрезке
Найдите простое число в диапазоне [𝐴, 𝐵].
10. (*) Первообразный корень
Первообразный корень по модулю 𝑝 – такое 𝑥 : ⟨1, 𝑥, 𝑥2 , . . . , 𝑥𝑝−2 ⟩ различны. Дано 𝑝, найти 𝑥.
11. (*) 4-SAT random walk
Адаптируйте уже известный вам алгоритм. Оцените время работы.
12. (*) 3-Coloring
Предложите Random walk алгоритм для задачи 3-Coloring. Оцените время работы.
13. (*) Пересечение полуплоскостей
Найдите за 𝒪(𝑛) точку 𝑥 в пересечении 𝑛 полуплоскостей: ⟨𝑐, 𝑥⟩ → max.
1/10
Закончилась практика?
Отнеси лист на второй этаж в эко-мусорку
Алгоритмы, весна 2017/18
Практика #4. Вероятностные алгоритмы.
Разбор задач практики
1. Понижение вероятности
После log 𝑛 повторов вероятность ошибки (1 − log1 𝑛 )log 𝑛 6 𝑒−1 .
Всё это вместе ln 𝑛 раз, тогда 𝑛1 . Итого log 𝑛 · ln 𝑛 повторов, время работы 𝒪(𝑛2 log3 𝑛).
2. Абсолютно надежный шифр
Из 𝑚 делаем 𝑚 ˆ 𝑘, 𝑘 – равномерный рандом.
𝑐 = 𝑚 ˆ 𝑘 ⇔ 𝑐 ˆ 𝑚 = 𝑘 ˆ 𝑚 ˆ 𝑚 = 𝑘.
⇒ вероятность получить 𝑐 равна вероятности, что ключ 𝑘 = 𝑐 ˆ 𝑚.
⇒ сообщения распределены так же, как ключи, каждое с вероятностью
1
.
2𝑛
3. Монте-Карло
Алгоритм.
Берем квадрат площади 𝑆, содержащий все круги. Кинем в него 𝑛 случайных точек, для
каждой проверим, лежит ли она в объединении/пересечении кругов.
Пусть попало 𝑛in , отвечаем 𝑛𝑛in 𝑆.
Анализ.
Отмасштабируем так, чтобы 𝑆 = 1, искомую площадь обозначим 𝑝.
𝐷[𝑛in ] = 𝑛𝑝(1 − 𝑝), 𝐷[ 𝑛𝑛in ] = 𝑝(1−𝑝)
𝑛
√︁
√
С высокой вероятностью отклонение 6 𝐷 ⇒ надо 𝑝(1−𝑝)
6 10−2 𝑝 ⇔ 𝑛 > 1−𝑝
· 104 .
𝑛
𝑝
Берем 𝑛 = 105 , но при маленьких 𝑝 нас ничто не спасет.
При объединении 𝑝 не слишком мало (Θ( 𝑘1 ) в худшем случае), при пересечении 𝑝 может быть
сколь угодно мало.
𝐸[𝑛in ] = 𝑝𝑛, 𝐸[ 𝑛𝑛in ] = 𝑝
Есть и другой подход.
Вообще можно без рандома: просто накидать сетку с шагом 1/𝜀.
В сетке будет 𝒪(1/𝜀2 ) клеток, как и в Монте-Карло.
Зато в 𝑑-мерном случае сетка размера 𝒪(1/𝜀𝑑 ), а Монте-Карло все еще хватит 𝒪(1/𝜀2 ).
4. Случайный элемент
Идём по файлу храним один элемент из прочитанных. Если считали 𝑖-й по счёту элемент,
то заменяем сохранённый с вероятностью 1/𝑖.
5. Игра на дереве
Из вершины на глубине 𝑑 всегда ходит игрок, который хочет попасть в число 𝑑 mod 2.
Алгоритм.
Рассмотрим вершину 𝑣. Найдем рекурсивно ответ для ее случайного ребенка. Если ребенок
проигрышный, то 𝑣 сразу выигрышная, и второго ребенка смотреть не надо. Если выигрышный, надо пойти и во второго.
Анализ попроще.
У выигрышной хотя бы один проигрышный ребенок.
Для выигрышной 𝑇 (𝑛) 6 21 𝑇 (𝑛 − 1) + 21 2𝑇 (𝑛 − 1) = 1.5𝑇 (𝑛 − 1) = 1.5𝑛 .
У проигрышной выигрышные дети ⇒ хотя бы два проигрышных внука.
2/10
Алгоритмы, весна 2017/18
Практика #4. Вероятностные алгоритмы.
Для проигрышной 𝑇 (𝑛) 6 2(6 12 𝑇 (𝑛 − 2) + 12 2𝑇 (𝑛 − 2)) = 3𝑇 (𝑛 − 2) = 3𝑛/2 .
Худший случай – 𝒪(1.73𝑛 ).
Анализ поточнее.
𝐿(𝑛) – матожидание времени работы из проигрышной вершины, 𝑊 (𝑛) – выигрышной.
𝐿(𝑛) = 2𝑊 (𝑛 − 1)
𝑊 (𝑛) 6 21 𝐿(𝑛 − 1) + 21 (𝑊 (𝑛 − 1) + 𝐿(𝑛 − 1)) = 12 𝑊 (𝑛 − 1) + 𝐿(𝑛 − 1) = 21 𝑊 (𝑛 − 1) + 2𝑊 (𝑛 − 2)
Рекуррента для 𝑊 (𝑛) дает примерно 𝒪(1.69𝑛 ).
Итого время max(𝐿(𝑛), 𝑊 (𝑛)) 6 2𝑊 (𝑛) = 𝒪(1.69𝑛 ).
6. Random в задачах оптимизации
Алгоритм: запустить много раз, выбрать наименьший ответ.
По неравенству Маркова на одном запуске ответ будет > 𝐶(1+𝜀)OPT с вероятностью <
𝜀
(это вероятность ошибки).
1 − 1+𝜀
Обозначим 𝑝 =
𝜀
,
1+𝜀
после
1
𝑝
=
1+𝜀
𝜀
1
1+𝜀
=
1
запусков Pr[ошибки] = (1 − 𝑝) 𝑝 6 𝑒−1 .
7. Приближение MAX-SAT
Детерминированный способ. Возьмём произвольные значения переменных, если выполнено меньше половины клозов, инвертируем все переменные.
Рандомизированный способ. Подставим все переменные случайно.
В каждом клозе с вероятностью > 12 выполнился первый литерал.
Матожидание числа выполненных клозов равно сумме матожиданий по всем клозам того,
что они выполнены ⇒ матожидание > 21 𝑚 > 12 OPT.
Но нам нужно не матожидание, а гарантия. Тут поможет предыдущая задача.
Максимизировать число выполненных клозов ⇔ минимизировать число нарушенных.
Если отклонились от 𝑋 менее, чем на 12 , то из-за целочисленности попали в 𝑋.
= 12 𝑚(1 + 𝑚1 ). Пользуемся предыдущей задачей для 𝜀 =
запусков.
1
𝑚 + 12
2
1
,
𝑚
нужно
1+𝜀
𝜀
=
1
1+
𝑚
1
𝑚
= 𝑚+1
8. Числа в окрестности
Простой способ.
Ткнем в случайное число 𝑎𝑖 , выведем в ответ все числа из [𝑎𝑖 ..𝑎𝑖 + 𝜀].
Обозначим за 𝐵 минимальные 𝑛3 чисел из [𝑥..𝑥+𝜀]. Если 𝑎𝑖 ∈ 𝐵, то на [𝑎𝑖 ..𝑎𝑖 +𝜀] лежит хотя
бы 𝑛3 чисел. Вероятность попасть в 𝐵 равна 𝑛/3
= 13 .
𝑛
Надежный способ.
Найдем статистики с номерами
𝑛
3
и
2𝑛
,
3
берем всё между ними.
9. Простое в отрезке
Ткнем в случайное число из отрезка, проверим на простоту. Проверяем Миллером-Рабином,
запускаем его 𝑘 раз, вероятность ошибки 41𝑘 .
Вероятность попасть в простое равна log1 𝐵 , в среднем log 𝐵 раз попадем в составное до
успеха.
Вероятность успеха (1 − 41𝑘 )log 𝐵 , берем 𝑘 = log log 𝐵 и побеждаем.
Строгий анализ.
3/10
Алгоритмы, весна 2017/18
С
С
С
С
Практика #4. Вероятностные алгоритмы.
вероятностью log1 𝐵 попали в простое, распознали его и закончили.
вероятностью (1 − log1 𝐵 ) попали в составное.
вероятностью (1 − log1 𝐵 )(1 − 41𝑘 ) распознаем составное и продолжаем.
вероятностью (1 − log1 𝐵 ) 41𝑘 ошибочно заканчиваем.
Среднее время работы
1
1
+(1− log1 𝐵 ) 1𝑘
log 𝐵
4
=
4𝑘 log 𝐵
.
4𝑘 +log 𝐵−1
Ошибка, если 𝑠 раз ткнем в составное, затем снова в составное и вернем его.
∑︀
(1− log1 𝐵 ) 1𝑘
4
= (log 𝐵 − 1) 41𝑘 .
(1 − log1 𝐵 )𝑠+1 41𝑘 =
1
log 𝐵
Если взять 𝑘 = log log 𝐵, то вероятность ошибки мала, ≈
1
,
log 𝐵
и число шагов ≈ log 𝐵.
𝐵
𝐴
− log
log 𝐵
𝐴
На самом деле вероятность попасть в простое
.
𝐵
Но если 𝐴 близко к 𝐵, можно и перебрать. Если же 𝐴 = const · 𝐵, то настоящая вероятность
выходит Θ( log1 𝐵 ).
10. (*) Первообразный корень
Ткнем в случайное число из [2, 𝑝 − 1] и проверим. Будем тыкать, пока не найдем.
𝑔 – первообразный ⇒ ∀𝑘 : (𝑘, 𝑝 − 1) = 1 𝑔 𝑘 тоже первообразный.
1
> log log
.
Итого первообразных корней 𝜙(𝑝 − 1) ⇒ вероятность попасть 𝜙(𝑝−1)
𝑝−1
𝑝
𝑝−1
Проверка числа 𝑔: достаточно убедиться, что 𝑥 𝑑 ̸= 1 для всех простых 𝑑 | (𝑝 − 1).
Для этого нужно факторизовать 𝑝, а далее за 𝒪(log2 𝑝).
Факторизовать мы сейчас умеем за 𝒪(𝑝1/4 log 𝑝).
11. (*) 4-sat random walk
Давайте сделаем то же самое. Но теперь мы приближаемся с вероятностью 14 .
𝑛/2 шагов: вероятность ( 41 )𝑛 , запусков 2𝑛 .
С вероятностью > 12 расстояние до ответа 6 𝑛2 .
𝑛 шагов: вероятность ( 58 )𝑛 , запусков 1.6𝑛 . (︀ )︀
На
𝑘 от ответа с вероятностью 𝑛𝑘 ( 12 )𝑛 .
(︀
)︀
∑︀ 1расстоянии
𝑛
1
( 2 )𝑛 𝑘 ( 4 )𝑘 = ( 12 )𝑛 (1 + 14 )𝑛 = ( 58 )𝑛 .
2𝑛 шагов: вероятность ≈ ( 23 )𝑛 , запусков ≈ 1.5𝑛 .
(︀ 2𝑘 )︀ 1 3𝑘/2 3 𝑘/2 (︀ 2𝑘 )︀ 3𝑘/2
С вероятностью > 𝑘/2
( 4 ) ( 4 ) = 𝑘/2 42𝑘 среди первых 2𝑘 шагов 6 𝑘/2 будут не туда
(⇒ придем в ответ).
∑︀ (︀𝑛)︀ 1 𝑛 (︀ 2𝑘 )︀ 3𝑘/2
( ) 𝑘/2 42𝑘
Вероятность успеха >
𝑘 2
(︀
)︀
∑︀
𝑛
> 2−𝑛
poly( 𝑘1 )( 31 )𝑘
𝑘
1
−𝑛
> poly( 𝑛 )2 (1 + 13 )𝑛 = poly( 𝑛1 )( 46 )𝑛 ≈ ( 23 )𝑛 .
√
(︀ 2𝑘 )︀ 3𝑘/2
1 1 𝑘
>
poly(
2𝜋𝑛( 𝑛𝑒 )𝑛 ).
)(
)
берется
из
формулы
Стирлинга
(𝑛!
≈
2𝑘
𝑘/2 4
𝑘 3
12. (*) 3-Coloring
Шаг walk’а: найти нарушенное ребро, случайный конец перекрасить в случайный цвет (причем выбор из двух цветов, перекрашивать в тот же нет смысла).
Вероятность того, что мы приблизились к ответу, > 14 : угадали вершину и цвет.
(︀ )︀ 𝑘
На расстоянии 𝑘 от ответа с вероятностью 𝑛𝑘 32𝑛 .
Дальше те же вычисления, что в прошлой задаче.
При 𝑛 шагах получится 2𝑛 запусков, но за 𝒪* (2𝑛 ) и так умели.
4/10
Алгоритмы, весна 2017/18
Практика #4. Вероятностные алгоритмы.
При 2𝑛 шагах получится вероятность poly( 𝑛1 )3−𝑛 (1 + 23 )𝑛 ≈ ( 59 )𝑛 , запусков ≈ 1.8𝑛 .
13. (*) Пересечение полуплоскостей
Наблюдение: ответ всегда либо пересечение двух границ полуплоскостей, либо «бесконечная
точка». Второй случай можно отсечь, добавив большой обрамляющий квадрат.
Пусть есть текущая точка 𝑥, и мы добавляем 𝑖-ю полуплоскость.
Если 𝑥 лежит в ней, то 𝑥 остается ответом.
Иначе 𝑥 должна лежать на границе 𝑖-й полуплоскости, пересечем эту границу с предыдущими 𝑖 − 1 и выберем новый ответ. Тратим на это 𝒪(𝑖).
В худшем случае 𝒪(𝑛2 ).
А теперь перед началом сделаем shuffle полуплоскостей.
Пусть после 𝑖 шагов ответ – пересечение прямых 𝑙 и 𝑚.
2
Потратим 𝒪(𝑖) только
∑︀если 2𝑙 или 𝑚 была последней, вероятность 𝑖 .
Итого матожидание
𝒪(𝑖) 𝑖 = 𝒪(𝑛).
5/10
Алгоритмы, весна 2017/18
Практика #4. Вероятностные алгоритмы.
Домашнее задание
3.1. Обязательная часть
1. (2) Понижение вероятности
Алгоритм работает за 𝒪(𝑛3 ), вероятность успеха 1/𝑛3 (ошибка односторонняя).
За какое время можно добиться вероятности успеха 1 − 1/2𝑛 ?
2. (2) Числа Кармайкла
Проверьте, что данное число является числом Кармайкла.
Оцените время работы и ошибку алгоритма.
3. (3) Устранение ошибок
Есть линейная функция 𝑓 : F𝑛2 → F2 . Линейность 𝑓 : ∀𝑥, 𝑦 𝑓 (𝑥 + 𝑦) = 𝑓 (𝑥) + 𝑓 (𝑦).
Есть 𝑔, которая отличается от 𝑓 на 𝜀-доле входов.
Дан 𝑥. Найти 𝑓 (𝑥). Можно вызывать только функцию 𝑔. Какой тип алгоритма получился?
4. (2) Приближённый MAX-3-SAT
Придумайте приближенный ZPP алгоритм с константой лучше 43 для MAX-3-SAT, про
который дополнительно известно что в каждом клозе ровно три различные переменные.
5. (2) Randomized NP
Что будет, если в NP проверяющий подсказку алгоритм будет из ZPP, а не из P? Как
полученный класс соотносится с уже известными?
6. (2) Сдать Полларда
В системе 𝐶1 = 100 тестов. Поллард работает с вероятностью 12 .
1
получить OK?
Сколько раз нужно запустить Полларда, чтобы с вероятностью 1 − 𝐶2 = 1 − 10
Больше баллов получат простые вычисления, которые можно сделать в уме для ∀ 𝐶1 , 𝐶2 .
7. (2) Случайное подмножество
Есть длинный файл из 𝑛 (заранее неизвестно) элементов, его можно последовательно читать,
но не хранить целиком. Требуется в конце вывести одно из 𝑘 элементных подмножеств c
равной вероятностью.
Хочется решение с целочисленными случайными числами.
(+2) А теперь файла 2 и на разных компьютерах. Можно прочитать из независимо, а потом
как-то объединить прочитанное.
6/10
Алгоритмы, весна 2017/18
Практика #4. Вероятностные алгоритмы.
3.2. Дополнительная часть
1. (3) Zero-knowledge-GI
Алиса и Боб знают два графа. Алиса утверждает, что знает перестановку 𝜋, которая задаёт
изоморфизм этих графов. Придумайте полиномиальный по времени протокол обмена сообщениями, который позволит Алисе убедить Боба, что она знает 𝜋, и при этом не сообщить
никакой полезной информации про 𝜋.
2. (1+2) Approximated median
Дан массив. За 𝒪(𝑛1/2 ) оцените максимально точно медиану.
Ошибка – расстояние по индексам между настоящей медианой и найденной нами.
(+2) Оцените ошибку, можно программно.
3. (3) BPP+
Пусть есть типа-BPP алгоритм 𝑀 :
∀ 𝑥 ∈ 𝐿 Pr[𝑀 (𝑥) = 1] > 𝑝 ∧ ∀ 𝑥 ̸∈ 𝐿 Pr[𝑀 (𝑥) = 0] > 1 − 𝑝 + 𝜀 (𝑝, 𝜀 > 0).
Получите из него BPP алгоритм с ошибкой 2−100 .
4. (3) 𝑘-путь
𝑘-путь – простой путь длины ровно 𝑘 вершин из 𝑎 в 𝑏. Придумайте алгоритм для нахождения 𝑘-пути за 𝒪* (𝛼𝑘 ), где 𝛼 – константа.
Подсказка: покрасьте вершины в случайные цвета...
7/10
Алгоритмы, весна 2017/18
Практика #4. Вероятностные алгоритмы.
Разбор домашнего задания
4.1. Обязательная часть
1. Понижение вероятности
3
Повторим 𝑛3 раз, станет вероятность ошибки (1 − 𝑛13 )𝑛 6 𝑒−1 .
Всё это еще 𝒪(𝑛) раз, станет 21𝑛 . Итого 𝑛4 повторов, время работы 𝒪(𝑛7 ).
2. Числа Кармайкла
Проверим Миллером-Рабином, что 𝑛 составное.
Проверим, что все 𝑎 < 𝑛 : gcd(𝑎, 𝑛) – лжесвидетели простоты, тестом Ферма. Если он сказал
«составное», то 𝑛 точно не число Кармайкла.
Наш запуск теста Ферма выглядит так: тыкаем в случайное 𝑎 < 𝑛, пока не будет gcd(𝑎, 𝑛) = 1.
𝑛
= 𝒪(log log 𝑛) попыток.
Только потом проверяем 𝑎𝑛−1 = 1 mod 𝑛. В среднем нужно 𝜑(𝑛)
На каждой попытке считаем gcd за 𝒪(log 𝑛), итоговое время в среднем 𝒪(log 𝑛 · log log 𝑛).
• 𝑛 – простое. Миллер-Рабин это выявит, ошибки не будет.
• 𝑛 – составное, не Кармайкла. Либо ошибется Миллер-Рабин (Pr 6 41 ), либо ошибется
Ферма (Pr 6 12 ). Несовместные события, вероятность ошибки 6 12 .
• 𝑛 – число Кармайкла. Может ошибиться Миллер-Рабин (вероятность 6 41 ), Ферма точно
скажет «простое». вероятность ошибки 6 14 .
Каждый тест нужно повторить несколько раз, тогда во всех случаях вероятность ошибки
6 13 . Ошибка двусторонняя.
3. Устранение ошибок
Берем случайое 𝑦, смотрим 𝑔(𝑥 + 𝑦) − 𝑔(𝑦).
Вероятность ошибки 6 2𝜀. Но она двусторонняя. Чтобы ее понижать, надо повторить много
раз и взять Majority. Работает при 𝜀 < 41 .
Заметим, что при 𝜀 > 1 − 14 это тоже работает: две ошибки компенсируют друг друга.
4. Приближённый MAX-3-SAT
При случайной подстановке переменных один клоз выполнится с вероятностью 87 : во всех
случаях, кроме трех нулей.
Тогда матожидание при случайной подстановке 78 𝑚.
Нужно нарушить < 18 𝑚 + 18 клозов, нужно 𝑚 + 1 запусков, как в практике.
5. Randomized NP
Если валидатор из ZPP, то на каждом 𝑥 матожидание времени работы 𝑝(|𝑥|).
Тогда для 𝑥 есть такой набор случайных бит, что валидатор работает не дольше 𝑝(|𝑥|).
Этот набор можно включить в подсказку. Чтобы его проверить, запускаем валидатор с будильником 𝑝(|𝑥|). Таким образом, это просто NP.
6. Сдать Полларда
Нужно (1 − ( 21 )𝑘 )𝐶1 > 1 − 𝐶2 .
Неравенство Бернулли: (1 − ( 12 )𝑘 )𝐶1 > 1 − 𝐶2𝑘1 .
1
𝑘 > log 𝐶
⇒ (1 − ( 12 )𝑘 )𝐶1 > 1 − 𝐶2𝑘1 > 1 − 𝐶2 .
𝐶2
8/10
Алгоритмы, весна 2017/18
Практика #4. Вероятностные алгоритмы.
7. Случайное подмножество
Поддерживаем текущее выбранное множество, изначально просто берём первые 𝑘 элементов. Когда встречаем 𝑖-й элемент бросаем монетку от 1 до 𝑖. Если выпало > 𝑘, то ничего не
делаем. Иначе заменяем 𝑖-й элемент в текущем множестве.
Интуиция: новый элемент должен войти в множество с вероятностью 𝑘𝑖 , и если входит, то
равновероятно вместо каждого текущего элемента. Строго можно доказать индукцией по 𝑛.
Если файла два, то построим ответы для них независимо, и будем потом объединять эти
ответы в общий. Сначала перемешаем чтобы были не случайные сочетания, а размещения.
Будем тоже строить размещение. Как выбрать первый элемент размещения объединения?
Это или первый элемент размещения первого списка (вероятность пропорциональна 𝑁11 ),
или первый элемент второго списка (вероятность пропорциональна 𝑁12 ).
Кинули рандом, взяли в ответ и забыли об элементе. Пусть для примера это был элемент из
первого списка. Продолжаем строить ответ похожим образом, разве что головной элемент
первого списка весит 𝑁11−1 (грубо говоря, словно выбранного элемента никогда и не было), а
второго всё также 𝑁12 .
9/10
Алгоритмы, весна 2017/18
Практика #4. Вероятностные алгоритмы.
4.2. Дополнительная часть
1. Zero-knowledge-GI
Алиса доказывает, что знает 𝜋 : 𝜋(𝐺0 ) = 𝐺1 .
Протокол: Алиса берёт случайную перестановку 𝜎 и даёт Бобу 𝐻 = 𝜎(𝐺1 ).
Боб случайно выбирает 𝑏 ∈ {0, 1} и просит у Алисы перестановку 𝜌 : 𝜌(𝐺𝑏 ) = 𝐻.
Наличие знания точно докажем: если Алиса действительно знает 𝜋, то всегда сможет
ответить: 𝜎(𝐺1 ) = 𝐻, 𝜋 ∘ 𝜎(𝐺0 ) = 𝐻.
Нулевое разглашение: 𝜎 и 𝜋 ∘ 𝜎 равномерно случайны, Боб не узнает ничего полезного.
При отсутствии знания не обманем: если Алиса не знает 𝜋, то не сможет дать 𝜌(𝐺𝑏 ) = 𝐻,
когда 𝐻 сделан из 𝐺1−𝑏 .
Подловим Алису с вероятностью 21 , надо повторить несколько раз (каждый раз новый 𝐻).
2. Approximated median
√
Алгоритм: выберем 𝑛 случайных чисел, вернём их медиану.
Наш алгоритм может давать сколь угодно большую абсолютную ошибку.
Пример: медиана равна 0, остальные числа в массиве ±∞, с вероятностью почти 1 абсолютная ошибка будет ∞.
Поэтому ошибку будем оценивать в таком виде: алгоритм вернул 𝑖-й элемент в отсортироравна |𝑖 − 𝑛2 |.
ванном порядке, должен был вернуть 𝑛2 -й, ошибка
√
Оценим вероятность
𝑝𝑘 того, что какие-то 2𝑛 из выбранных чисел оказались меньше 𝑛2 − 𝑘,
√
а остальные 2𝑛 больше:
(︂ √ )︂
√ [︀
√
√
√
]︀√𝑛/2 [︀
]︀√𝑛/2
𝑛
𝑛/2 𝑛/2+𝑘
𝑛/2
𝑛 1 𝑘
𝑛/2
2𝑘
4𝑘2
1 𝑘
2𝑘
(
6
2
(
=
(1−
=
(1−
𝑝𝑘 = √
( 𝑛/2−𝑘
)
)
−
)(
+
)
)(1+
)
)
2
𝑛
𝑛
2 𝑛 2 𝑛
𝑛
𝑛
𝑛
𝑛/2
Возьмём
𝑛2
4𝑘2
√
=
𝑛
,
2
получим 𝑝𝑘 6 𝑒−1 . 𝑘 = Θ(𝑛3/4 ).
3. BPP+
Повторим много раз. Если доля ответов «да» больше 𝑝 − 2𝜀 , отвечаем «да», иначе «нет».
Анализ???
4. 𝑘-путь
Покрасим вершины в 𝑘 цветов, каждую в случайный.
Теперь можно за 𝒪* (2𝑘 ) найти разноцветный 𝑘-путь, если он есть. Динамика как в поиске
гамильтонова пути.
Если 𝑘-путь есть, покрасить его 𝑘 𝑘 способов, а разноцветно покрасить 𝑘! способов.
Вероятность успеха 𝑘𝑘!𝑘 > 𝑒−𝑘 , повторим 𝒪(𝑒𝑘 ) раз.
Итого время 𝒪* ((2𝑒)𝑘 ).
10/10
Скачать