- PVSM.RU - https://www.pvsm.ru -

Алгоритмы и структуры данных поиска. Лекции и курсы от Яндекса

Сегодня мы завершаем эту серию постов, посвященных лекциям Школы анализа данных. Последний по порядку, но никак не по важности курс — «Алгоритмы и структуры данных поиска».

В этом курсе рассматриваются базовые алгоритмы и структуры данных, включая хешировани, сложность и модели вычислений, деревья поиска, B-деревья, задачи геометрического поиска, динамическую связность в графах и другое.

Мы учли то, о чём нас просили в комментариях к прошлым курсам — теперь при желании можно не только смотреть/скачивать лекции по отдельности, но и загрузить всё разом в виде открытой папки на Яндекс.Диске [1]. Кстати — в предыдущих постах тоже появились такие же апдейты (вот ссылки для удобства: «машинное обучение [2]», «дискретный анализ и теория вероятностей [3]», «параллельные и распределённые вычисления [4]»).

Лекции читает Максим Александрович Бабенко, заместитель директора отделения computer science, ассистент кафедры математической логики и теории алгоритмов механико-математического факультета МГУ им. М. В. Ломоносова, кандидат физико-математических наук.

Полный курс в виде папки на Яндекс.Диске [1]

Лекция 1. Сложность и модели вычислений. Анализ учетных стоимостей (начало) [5]

Основные ресурсы: память и время. О-символика. Примеры моделей вычисления: машина Тьюринга, RAM-машина. Сложность в среднем и худшем случаях. Пример: задача сортировки. Сортировка выбором. Теоретико-информационная нижняя оценка сложности. Разрешающие деревья. Нижняя оценка сложности в модели разрешающих деревьев. Массивы переменного размера: аддитивная и мультипликативная схемы реаллокации. Анализ мультипликативной схемы для массива переменного размера с помощью банковского метода.

Лекция 2. Анализ учетных стоимостей (окончание) [6]

Анализ учетных стоимостей операций: функция потенциала, истинные и учетные стоимости. Стеки и очереди. Реализация на основе массива переменного размера и на основе связанного списка. Моделирование очереди с помощью двух стеков. Задача о поддержании динамического максимума в стеке и очереди. Изменяемые (mutable) и неизменяемые (immutable) структуры данных. Структуры данных с хранением истории (persistent). Immutable-стек и immutable-очередь. Проблема множественного будущего при анализе учетных стоимостей в persistent-структурах.

Лекция 3. Функции быстрой сортировки и сортировки слиянием [7]

Понятие о методе «разделяй и властвуй». Алгоритм Merge-Sort. Слияние двух упорядоченных списков. Оценка сложности. K-way Merge-Sort для работы во внешней памяти. Сортировка слиянием без использования дополнительной памяти. Общая схема алгоритма Quick-Sort. Два варианта реализации Partition. Примеры неудачного выбора опорных элементов. Рандомизированный выбор опорного элемента. Сложность Quick-Sort в худшем и среднем случаях. Глубина рекурсии в худшем и среднем случаях. Элиминация хвостовой рекурсии. Задача об оптимальном дереве слияний. Коды Хаффмана. Слияние двух упорядоченных последовательностей различной длины. Теоретико-информационная нижняя оценка. Бинарный поиск «от края» (galloping).

Лекция 4. Порядковые статистики. Кучи (начало) [8]

Нахождение порядковых статистик с помощью рандомизированной модификации алгоритма Quick-Sort. Линейность матожидания времени работы. Приближенные медианы. Выбор k-й порядковой статистики за линейное в худшем случае. Деревья со свойствами кучи. Почти полные бинарные деревья: нумерация вершин, навигация. Двоичная куча. Операция просеивания вниз и вверх. Реализация операций вставки, удаления и поиска минимума. Преобразование произвольного массива ключей в кучу (операция Make-Heap), линейность времени работы. Алгоритм сортировки Heap-Sort.

Лекция 5. Кучи (начало). Хэширование (начало) [9]

k-ичные кучи, зависимость сложности операций от выбора k. Биномиальные (binomial), левацкие (leftlist) и косые (skew) кучи.

Лекция 6. Хэширование [10]

Хеш-функции. Коллизии. Разрешение коллизий методом цепочек, методом последовательных проб и методом двойного хеширования. Гипотеза простого равномерного хеширования, оценка средней длины цепочки. Универсальные семейства хеш-функций, оценка средней длины цепочки. Построение универсального семейства для целочисленных ключей. Совершенные хеш-функции. Построение совершенной хеш-функции с помощью универсального семейства. Интерфейс множества с ошибками. Фильтр Блюма (Bloom filter). Оценка вероятности ложноположительного срабатывания. Интерфейс словаря с ошибками. Модификация фильтра Блюма (bloomier filter).

Лекция 7. Деревья поиска (начало) [11]

Определение дерева поиска. Вставка и удаление элементов. Inorder-обход дерева. Красно черные деревья: определение и основные свойства. Реализация операций вставки для красно-черного дерева. Splay-деревья. Операция splay: zig, zig-zig и zig-zag шаги. Реализация операций вставки, удаления, слияния и разделения для splay-деревьев.

Лекция 8. Деревья поиска (окончание). Декартовы деревья [12]

Декартовы деревья (дучи). Единственность декартова дерева для заданного набора различных ключей и приоритетов. Логарифмическая оценка матожидания высоты дучи.Операции слияния и разделения для дуч. Операции вставки и удаления элементов для дуч. Построение декартового дерева за линейное время при условии предварительной сортировки ключей.

Лекция 9. B-деревья. Система непересекающихся множеств [13]

B+ деревья: определения и основные свойства. Операции поиска, вставки и удаления для B+ деревьев. Системы непересекающихся множеств. Реализация с использованием леса. Ранги вершин, эвристика ранга. Логарифмическая оценка ранга через количество элементов. Рандомизированная ранговая эвристика. Эвристика сжатия путей. Оценка учетной стоимости операций (без доказательства).

Лекция 10. Задачи RMQ и LCA [14]

Задачи RMQ (range minimum query) и LCA (least common ancestor). Сведение от задачи RMQ к задаче LCA, декартово дерево. Алгоритм Таржана для offline-версии задачи LCA. Простейшие алгоритмы для online-версии задачи LCA: полная и разреженная таблицы ответов. Алгоритм Фарах-Колтона-Бендера для к задаче ±1-RMQ. Сведение задачи LCA к задаче ±1-RMQ: эйлеров обход дерева.

Лекция 11. Задачи геометрического поиска [15]

Location problem, stabbing problem. Деревья интервалов. Сведение системы интервалов к двумерной задаче. Задача поиска точек в коридоре. Priority search tree. Задача поиска точек в прямоугольнике. Дерево отрезков по координате X, упорядоченные по Y списки точек в каждой вершине. Сложность O(n log n) для построения и O(log^2 n) для запроса. Уменьшение времени поиска до O(log n). Задача одновременного поиска в наборе упорядоченных списков. Fractional cascading.

Лекция 12. Динамическая связность в графах [16]

Задача о динамической связности: вставки и удаления ребер, запросы о связности. Частный случай задачи для случая лесов. Дервья эйлеровых обходов: слияние и разделение. Использование амортизации и набора остовных лесов для решения со сложностью O(log^2 n).

Автор: anton

Источник [17]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/algoritmy/52537

Ссылки в тексте:

[1] открытой папки на Яндекс.Диске: http://yadi.sk/d/zN7QI99-FiQJR

[2] машинное обучение: http://habrahabr.ru/company/yandex/blog/208034/

[3] дискретный анализ и теория вероятностей: http://habrahabr.ru/company/yandex/blog/208120/

[4] параллельные и распределённые вычисления: http://habrahabr.ru/company/yandex/blog/208244/

[5] Лекция 1. Сложность и модели вычислений. Анализ учетных стоимостей (начало): http://shad.yandex.ru/lectures/algorithms_1.xml

[6] Лекция 2. Анализ учетных стоимостей (окончание): http://shad.yandex.ru/lectures/algorithms_2.xml

[7] Лекция 3. Функции быстрой сортировки и сортировки слиянием: http://shad.yandex.ru/lectures/algorithms_3.xml

[8] Лекция 4. Порядковые статистики. Кучи (начало): http://shad.yandex.ru/lectures/algorithms_4.xml

[9] Лекция 5. Кучи (начало). Хэширование (начало): http://shad.yandex.ru/lectures/algorithms_5.xml

[10] Лекция 6. Хэширование: http://shad.yandex.ru/lectures/algorithms_6.xml

[11] Лекция 7. Деревья поиска (начало): http://shad.yandex.ru/lectures/algorithms_7.xml

[12] Лекция 8. Деревья поиска (окончание). Декартовы деревья: http://shad.yandex.ru/lectures/algorithms_8.xml

[13] Лекция 9. B-деревья. Система непересекающихся множеств: http://shad.yandex.ru/lectures/algorithms_9.xml

[14] Лекция 10. Задачи RMQ и LCA: http://shad.yandex.ru/lectures/algorithms_10.xml

[15] Лекция 11. Задачи геометрического поиска: http://shad.yandex.ru/lectures/algorithms_11.xml

[16] Лекция 12. Динамическая связность в графах: http://shad.yandex.ru/lectures/algorithms_12.xml

[17] Источник: http://habrahabr.ru/post/208716/