1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9

# конспект · шаг 9 из 9

Конспект: Монте-Карло, Лас-Вегас и рандомизированный quicksort

выжимка - её можно унести в заметки

Понятия

Алгоритм Лас-Вегас - ответ всегда верен, случайно время. Алгоритм Монте-Карло - время ограничено, ответ верен с заданной вероятностью; ошибка односторонняя, если один из ответов достоверен.

Метод Монте-Карло - оценка величины как доли случайных проб, попавших в цель.

Зерно - начальное состояние генератора псевдослучайных чисел; период - длина цикла генератора.

Разрез графа - разбиение вершин на две части; размер - число рёбер между ними. Стягивание ребра - склейка его концов в одну вершину с сохранением параллельных рёбер.

Вероятностный метод - доказательство существования объекта через ожидание по случайному выбору.

Что унести

                  ЛАС-ВЕГАС                          МОНТЕ-КАРЛО
случайно          время                              правильность
гарантия          ожидаемое время на любом входе     вероятность ошибки на любом входе
примеры           quicksort, быстрый выбор,          Миллер-Рабин, Фрейвалдс, Каргер,
                  декартово дерево, список с         Рабин-Карп без перепроверки,
                  пропусками, Рабин-Карп с проверкой оценка по выборке

Лас-Вегас → Монте-Карло:  оборвать на 2T          отказ ≤ 1/2;  k попыток - ≤ 1/2ᵏ
Монте-Карло → Лас-Вегас:  повторять до проверки   (запуск + проверка) / p;  нужна дешёвая проверка
ОЦЕНКА ВЫБОРКОЙ:  ошибка ~ 1/√n        π по 40 000 точек: 3,1403, гарантия ±0,027 с надёжностью 95%
редкая цель: доля p с точностью 10% требует порядка 100/p проб
ГЕНЕРАТОР                                      x = (a·x + c) mod m
одно зерно - одна последовательность           5, 3, 16: период 16;   4, 2, 16: застревает на 10
random - вихрь Мерсенна, период 2¹⁹⁹³⁷ − 1      для ключей и токенов - secrets
остаток от деления перекашивает                8 значений mod 3:  3, 3, 2
честно - отбор: взять биты, лишнее выбросить   randrange и randint так и делают
ТАСОВАНИЕ ФИШЕРА-ЙЕТСА                         НАИВНОЕ (j из всех n)
для i от n − 1 вниз до 1:                      путей nⁿ, перестановок n!, не делится
    j = случайное от 0 до i                    n = 3:  27 путей,  порядки получают 4, 5, 5, 5, 4, 4
    поменять a[i] и a[j]
путей n!, каждой перестановке - один           j от 0 до i − 1: только циклы, (n − 1)! штук
32-битное зерно: не больше 2³² раскладов из 52! ≈ 8·10⁶⁷
БЫСТРАЯ СОРТИРОВКА, СЛУЧАЙНЫЙ ОПОРНЫЙ, РАЗНЫЕ ЭЛЕМЕНТЫ
zᵢ и zⱼ сравниваются  ⇔  первым опорным из zᵢ … zⱼ стал zᵢ или zⱼ          P = 2 / (j − i + 1)
E[сравнений] = 2(n + 1)Hₙ − 4n ≈ 1,39 · n · log₂ n            σ ≈ 0,65 · n
n = 500:  формула 4806,  пять запусков 4574 … 5091;  нижняя граница log₂ 500! = 3767
без монетки на отсортированных 250:  31 125 = n(n − 1)/2,  с монеткой ≈ 2063
одинаковые элементы: квадрат и с монеткой → разбиение на три части
ПРОВЕРИТЬ, НЕ ВЫЧИСЛЯЯ                         ЦЕНА        ОШИБКА «РАВНО»
A·B = C ?   сравнить A·(B·r) и C·r,  r из 0/1  3n²         ≤ 1/2 за проверку, ≤ 1/2ᵏ за k
F = G ?     сравнить в случайной точке mod p   d           ≤ d / p,  p простое
ответ «не равно» достоверен всегда; точка и вектор выбираются ПОСЛЕ того, как дан ответ
испорченный элемент c[3][7]: 22 пропуска из 40;  ошибка x³ − x не видна в 0, 1 и −1
АЛГОРИТМ КАРГЕРА
пока вершин больше двух: стянуть равновероятно выбранное ребро
P(данный минимальный разрез уцелел) ≥ (1 − 2/n)(1 − 2/(n−1)) … (1 − 2/3) = 2 / (n(n − 1))
n(n − 1) · ln n прогонов, взять наименьший:  промах ≤ 1/n²
два клубка по 4 вершины: один прогон прав в 16% случаев, чаще всего выдаёт 3 вместо 2
следствие: минимальных разрезов не больше n(n − 1)/2      Каргер-Штайн: O(n² log³ n)
СРЕДНЕЕ КАК ДОВОД
вероятностный метод     E[X] = μ  ⇒  есть объект с X ≥ μ          разрез ≥ m/2 в любом графе
условные ожидания       ставь вершину напротив большинства         тот же m/2 без монеток; 66 из 100
принцип Яо              плохое распределение входов для всех       одна единица из n: (n + 1)/2 проб
                        детерминированных ⇒ предел для всех        и с монетками
                        рандомизированных

Ловушки джокера

Принял ответ Монте-Карло за истину. «Простое» после двух раундов - это до 6% ошибки.

Поставил цикл «пока не повезёт» на путь с пределом времени. Среднее время не ограничивает один вызов.

Перезапустил с тем же зерном. Повторы обязаны бросать новые монетки.

Взял остаток от деления. При n в три миллиарда нижние 1,3 миллиарда значений выпадают вдвое чаще.

Перемешал сортировкой со случайным сравнением. Распределение зависит от алгоритма сортировки.

Засеял генератор временем. 86,4 миллиона миллисекунд в сутках перебираются за секунды.

Забыл про одинаковые ключи. Столбец с пятью значениями сортируется за квадрат и с монеткой.

Проверил в «удобной» точке. Ошибку можно спрятать в любой точке, известной заранее.

Склеил случайную пару вершин или убрал параллельные рёбра. Оценка 2/n получена для равновероятного выбора ребра с учётом кратности.

Сделал вывод «почти любой объект подойдёт». Ожидание даёт существование, а не типичность.

Проверь себя

Чем платит алгоритм Лас-Вегас и чем - Монте-Карло? Почему наивное тасование не может быть равномерным? Когда два элемента сравниваются в быстрой сортировке? Откуда 1/2 в проверке Фрейвалдса? Почему минимальный разрез трудно задеть случайным ребром? Что доказывает вероятностный метод и чего он не даёт?

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.