Алгоритмы

Randomized Algorithms: Сила случайности

Цели урока

  • Понимать преимущества рандомизации
  • Различать Monte Carlo и Las Vegas алгоритмы
  • Реализовать Miller-Rabin test
  • Анализировать ожидаемое время работы
  • Применять amplification для уменьшения ошибки

Предварительные знания

  • QuickSort
  • Основы теории вероятностей
  • Quick Sort

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

  • Криптография: генерация ключей, primality testing
  • ML: SGD, random forests, dropout
  • Распределённые системы: load balancing, consensus
  • Игры: процедурная генерация, AI

Рабин, Соловей и Штрассен: случайность как инструмент

Идея намеренно использовать случайность в алгоритмах оформилась в середине 1970-х. В 1976 году Майкл Рабин опубликовал работу 'Probabilistic Algorithms', а вскоре, в 1977 году, Роберт Соловей и Фолькер Штрассен предложили вероятностный тест простоты Соловея-Штрассена. Эти результаты показали, что случайный выбор может давать быстрые ответы с управляемой вероятностью ошибки там, где детерминированные методы слишком медленны. Ещё раньше, в 1961 году, Тони Хоар придумал quicksort, и позже случайный выбор опорного элемента стал классическим приёмом, защищающим алгоритм от наихудшего случая O(n^2).

Зачем случайность?

**Randomized algorithms** используют случайные числа для принятия решений. Это не хак - это мощная парадигма с математическими гарантиями.

**Примеры, которые вы уже знаете:**

  • **Randomized QuickSort**: random pivot избегает O(n²)
  • **Hash tables**: рандомизированные хеш-функции
  • **Skip List**: вероятностная альтернатива BST
  • **Bloom Filter**: вероятностный membership test
  • **HyperLogLog**: подсчёт уникальных элементов

**Ключевое:** рандомизация не делает алгоритм ненадёжным. При правильном анализе мы получаем строгие вероятностные гарантии.

Почему Randomized QuickSort лучше детерминированного?

Monte Carlo vs Las Vegas

**Два основных типа рандомизированных алгоритмов:**

**Подтипы Monte Carlo:**

**Можно конвертировать:** Las Vegas → Monte Carlo (ограничить время, вернуть 'не знаю'). Monte Carlo → Las Vegas (повторять пока не уверены).

Randomized QuickSort - это:

Monte Carlo: примеры

**Miller-Rabin Primality Test** - проверка простоты за O(k log³n).

**Karger's Min-Cut** - минимальный разрез графа.

**Karger's алгоритм:** O(n²) на один запуск, O(n⁴ log n) для высокой вероятности. Улучшенная версия Karger-Stein: O(n² log³ n).

Как уменьшить вероятность ошибки Monte Carlo?

Las Vegas: примеры

**Randomized QuickSort** - классический Las Vegas алгоритм.

**Randomized Selection (QuickSelect):**

**Random Treap (дерево + куча):**

**Las Vegas гарантирует корректность.** Если нужен результат "наверняка" - используй Las Vegas. Если допустима малая ошибка ради скорости - Monte Carlo.

Treap использует случайные приоритеты для:

Анализ рандомизированных алгоритмов

**Ожидаемое время (Expected running time)** - среднее по всем случайным выборам алгоритма.

**Хвостовые неравенства (Tail bounds):**

**На практике:** рандомизированные алгоритмы редко работают намного хуже ожидания. Хвостовые неравенства дают формальные гарантии.

Что означает 'w.h.p.' (with high probability)?

Randomized Algorithms

  • Las Vegas: всегда правильно, время случайное
  • Monte Carlo: время фиксировано, возможна ошибка
  • Amplification: k запусков → ошибка ε^k
  • E[время]: матожидание по случайным выборам
  • w.h.p.: вероятность ≥ 1 - 1/poly(n)

Связанные темы

Рандомизация пронизывает многие области CS.

  • QuickSort — Классический Las Vegas
  • Skip List — Рандомизированная структура
  • Bloom Filter — Вероятностная структура

Связанные уроки

  • alg-06-quick-sort — Случайный опорный элемент делает QuickSort образцовым примером
  • prob-01-intro — Анализ рандомизированных алгоритмов требует теории вероятностей
  • alg-25-rabin-karp — Rabin-Karp - Monte Carlo алгоритм поиска строк
  • ds-24-bloom-filter — Bloom-фильтры вероятностно меняют точность на память
  • ml-09-gradient-descent
  • ml-48-rl-intro
Randomized Algorithms: Сила случайности

0

1

Войти