MakarovSuites
Русский
EnglishDeutschРусскийУкраїнськаFrançaisEspañolItalianoPolski
Связь и лицензии

Math

Дни рождения и коллизии

Люди приходят на кольцо дней, пока двое не окажутся на одном: в году из 365 дней это 23-й человек, а не 183-й, на Марсе — 32-й, в 65 536 корзинах хеша — 302-й; прогоны против точной кривой, дни плывут под перетаскиванием от года до 2³², правило квадратного корня читается вживую, и задача про марсианскую комнату.

Дни рождения и коллизии — Изображение из программы
Изображение из программы

Что происходит

Кольцо дней. Люди приходят по одному и зажигают день, на который попали; когда кто-то попадает на уже зажжённый день, кольцо вспыхивает и прогон окончен. В году из 365 дней это случается около 23-го человека — не 183-го, потому что вопрос не в том, совпадёт ли чей-то день рождения с твоим, а в том, совпадут ли у каких-нибудь двоих, а пар среди 23 человек 253. Точная кривая — 1 − (1 − 1/m)(1 − 2/m)…(1 − (n − 1)/m): 50,7 % при 23, 99 % при 57. Прогон за прогоном, и график заполняет эмпирическую долю поверх кривой. Тяни по кольцу — число дней плывёт по логарифму: марсианскому году из 687 дней нужно 32 человека, хеш-таблица на 65 536 корзин сталкивается на 302-м ключе, 32-битный хеш — около 77 000-го; комната, в которой столкновение — монетка, растёт как √(2m ln 2), корень из числа дней, а не число дней. Поэтому у хеша корзин должно быть куда больше, чем ключей, и поэтому атака «дней рождения» — самый дешёвый способ сломать короткую подпись.

Уравнения модуля
Уравнения
совпадение среди n человек:  P = 1 − (1 − 0/m)(1 − 1/m)…(1 − (n − 1)/m);  365 дней: 22 человека 47.6 %, 23 человека 50.7 %, 57 человек 99 %;  ожидаемое первое совпадение наступает на 24.617-м человеке
число людей с шансами как у монеты (наименьшее n с P ≥ ½):  365 → 23, Марс 687 → 32 (52.0 %; 31 даёт 49.7 %), 65 536 корзин → 302, 2^32 → 77 164
правило квадратного корня:  n ≈ √(2m ln 2) = 22.5, 30.9, 301.4, 77 162.7 - группа растёт как квадратный корень из числа дней, а не как число дней
прогоны:  один розыгрыш на человека, день = floor(r·m), через общий xorshift;  зерно 1 при 365 днях: 40-й человек попадает на день 200, уже занятый 34-м;  зёрна 1…1000: 518 дают совпадение к 23-му, среднее первое совпадение 24.05
хеши:  та же арифметика для ключей и корзин - 32-битный хеш, как ожидается, даёт коллизию примерно после 77 000 ключей

Другие эксперименты

К каталогу
Код, который сам себя чинит — Изображение из программы

Math

Код, который сам себя чинит

Шестнадцать битов в квадрате, одиннадцать из них — сообщение: щёлкни по одному, и четыре лампы проверок назовут его адрес, а блок починит себя сам. Две ошибки блок поймает, но исправить не сможет; три — и он солжёт уверенно. Каждое утверждение исчерпывающее: все 32 768 одиночных ошибок найдены, все 245 760 двойных пойманы, все тройные исправлены неверно.

Бассейны метода Ньютона — Изображение из программы

Math

Бассейны метода Ньютона

Раскрась каждую стартовую точку по корню, к которому приходит метод Ньютона: при двух корнях граница — прямая, как доказал Кэли в 1879, при трёх — фрактал, который принадлежит всем трём бассейнам сразу. Потяни корень и смотри, как двигаются площади: корень, оттянутый наружу, забирает МЕНЬШЕ окна, а не больше.

Случайные блуждания и PageRank — Изображение из программы

Math

Случайные блуждания и PageRank

Проследите движение вероятностной массы по ориентированному графу и сравните итерации матрицы с ансамблем случайных блужданий. Телепортация позволяет PageRank сходиться к единственному распределению. Сравните периодический цикл и граф, в котором необработанные висячие вершины вызывают утечку массы.