Вы, наконец, узнаете, почему ДД работает за логарифм, почему быстрая сортировка быстрая, какой модуль нужно выбирать для хэшей, сколько сэмплов нужно выбирать для монте-карло и т. д.
Следующие строчки позволят нам генерировать распределения и рисовать графики, не обращайте внимание.
import numpy as np
import matplotlib as plt
%matplotlib inline
import seaborn as sns
sns.set()
В вузах теорвер очень долго аксиоматизируют перед тем, как перейти к чему-то полезному. Сейчас поясним, зачем.
Рассмотрим равносторонний треугольник, вписанный в окружность. Наудачу выбирается хорда окружности. Какова вероятность того, что выбранная хорда длиннее стороны треугольника?
Оказывается, можно придумать хотя бы три способа решать задачу, которые выглядят адекватно, но все дают разные ответы.
-
Наудачу выберем две точки на окружности и проведём через них хорду. Чтобы посчитать искомую вероятность, представим, что треугольник повёрнут так, что одна из его вершин совпадает с концом хорды. Заметим, что если другой конец хорды лежит на дуге между двумя другими вершинами треугольника, то длина хорды больше стороны треугольника. Длина рассмотренной дуги равна трети длины окружности, значит искомая вероятность равна
$\frac13$ . -
Зафиксируем радиус окружности, наудачу выберем точку на радиусе. Построим хорду, перпендикулярную зафиксированному радиусу, проходящую через выбранную точку. Для нахождения искомой вероятности, представим, что треугольник повёрнут так, что одна из его сторон перпендикулярна зафиксированному радиусу. Хорда длиннее стороны треугольника, если её центр ближе к центру, чем точка пересечения треугольника с зафиксированным радиусом. Сторона треугольника делит пополам радиус, следовательно вероятность выбрать хорду длиннее стороны треугольника
$\frac12$ . -
Выберем наудачу произвольную точку внутри круга и построим хорду с центром в выбранной точке. Хорда длиннее стороны равностороннего треугольника, если выбранная точка находится внутри круга, вписанного в треугольник. Площадь вписанного круга есть
$\frac14$ от площади большего, значит исходная вероятность равна$\frac14$ .
Как мы увидели, от формального определения «случайной хорды» непосредственно зависит ответ.
Каждый раз, когда в истории математики появляется подобный приводящий к протеворечиям парадокс, математики паникуют и начинают всё формализовывать и аксиоматизировать. Так появилась теория вероятностей (внимание: не «ти», а «тей»).
Перейдем к самим определениям:
Функцию
Геометрическое распределение.
Пусть
Попытаемся оценить
Математическим ожиданием случайной величины
Самое главное для нас свойство — ожидание линейно:
Акцентируем внимание:
Также, в частности его можно домножать на константу.
Теперь можно перейти к практическим задачам.
Петя кидает монету, с вероятностью
$p$ выпадает орел и он прекращает кидать ее, с вероятностью$1-p$ выпадает решка и он кидает ее еще раз. Пусть$X$ - это количество бросков. Найдите$\rho_X(x)$ и$F_X(x)$ .
Когда автор пришел на первое занятие по английскому в МФТИ, препод устроила следующую игру на знакомство: разделила всех студентов на две команды. В каждой команде про своих членов загадываются факты: кто-то мечтал стать акробатом, кто-то смотрит анимэ и всё в таком духе. Команде соперников сообщались только эти факты, и им нужно было отгадать, кому какой принадлежит. Побеждает команда, которая отгадала больше фактов о соперниках. Нас было 11 — простое число, никак не делящееся на равные команды, и поэтому в одной команде было 5 человек, а в другой 6. Автору стало интересно: если отбросить все психологические аспекты и делать все рандомно, у какой команды вероятность победить выше?
Следует заметить, что все-таки ожидание правильно отгаданных вопросов не очень помогает выяснить, у какой команды есть преимущество и какое.
Высота дерева. Высота в среднем логарифмическая. Любознательные могут ознакомиться с типа доказательством, но это не обязательно.
Глубина вершины — это количество родителей (прим. К. О.). Введем индикатор.
Тут на самом деле будет примерно так же, как с ДД. Нас интересует суммарное число сравнений. Просуммируем для каждой пары элементов вероятность, что они будут сравнены.
Как для пары определить эту вероятность? Посмотрим на все элементы между ними, будь они в отсортированном массиве.
Внезапно возникает гармонический ряд, ну а дальше мы знаем.
Дисперсия — это количественная метрика. Это не что-то абстрактное, как могли рассказать в школе на теорвере, а формально определенная величина, имеющая кучу всяких полезных свойств.
Дисперсия определяется как средний квадрат отклонения случайной величины от ее матожидания:
Её проще считать по другой формуле, разложив квадрат внутри ожидания:
Эту формулу мы будем использовать для вывода разных свойств.
У дисперсии очень много крутых свойств.
Предполагаем, что
Важное отличие от свойств матожидания: дисперсию так просто можно считать только для независимых величин.
Закон больших чисел — принцип, который описывает результат выполнения одного и того же эксперимента много раз. Согласно закону, среднее значение конечной выборки из фиксированного распределения близко к математическому ожиданию этого распределения.
У матожидания (константы) стандартное обозначение
Это немного очевидное равенство. Теперь нас интересует, насколько точно оно в реальности достигается:
С одной стороны, оно домножается на
Когда вы в каких-нибудь библиотеках для анализа данных просите показать какой-то summary, то чаще всего вы увидите два числа: матожидание и дисперсию.
Центральная предельная теорема названа так пафосно вполне обоснованно.
Она говорит, что нам достаточно про каждое слагаемое знать всего два числа — ожидание и дисперсию.
Доказать это очень трудно. Даже со ссылками на мощные теоремы оно займёт не одну страницу. Обычно доказательство рассказывают в середине второго курса.
Трудно даже доказать, что это распределение, т. е. что
Алгоритмы вида «давайте посчитаем значения в разных случайных точках и усредним» называются методами монте-карло.
Пусть у нас есть единичный квадрат и несколько сотен кружков. Нам нужно посчитать долю области квадрата, которая не покрывается ни одним из кругов, с точностью до 1%.
Можно просто делать так: тыкать в 10000 случайных точек и проверять для каждой, является ли она «хорошей», а затем вывести
Сдать можно сюда.
Вообще, хэш — это такая функция, которая сопоставляет элементу какой-то другой элемент. С точки зрения криптоанализа, она должна быть трудно обратимой, а с точки зрения алгоритмиста — генерирующей равномерные игреки.
Можно делать так если мы планируем хранить
Это будет работать, потому что из-за рандома в среднем в каждой ячейке будет по одному элементу. Но константа у такого решения большая.
Стандартная хэш-таблица из STL по непонятным автору причинам работает очень медленно. Во многих задачах она является самой нагруженной структурой. Её можно написать в 3-5 раз быстрее.