 
        
        - •Граф. Ориентированный граф. Представления графа. Обход графа в глубину и в ширину.
- •Топологическая сортировка. Подсчет числа путей в орграфе.
- •Сильно связные компоненты.
- •Поиск кратчайших путей в графе. Алгоритм Флойда. Алгоритм Дейкстры. Алгоритм Форда-Беллмана.
- •Алгоритм a*. Эвристики.
- •Минимальное остовное дерево. Алгоритм Прима. Биномиальная куча.
- •Амортизационная стоимость. Фибоначчиева куча. Амортизационная стоимость (анализ)
- •Метод потенциалов
- •Фибоначчиева Куча
- •Структура
- •Время работы
- •Система непересекающихся множеств. Алгоритм Крускала.
- •Наивная реализация
- •Эвристика сжатия пути
- •Эвристика объединения по рангу
- •Потоки, Форда-Фалкерсона.
- •Декартово дерево
- •Дерево Фенвика. Дерево отрезков и динамическое программирование для rmq.
- •Сведение rmq к lca и наоборот.
- •Препроцессинг
- •Ответы на запросы
- •Алгоритм
- •Доказательство
- •Сложность
- •Алгоритм
- •Минимум внутри блока
- •Результат
- •Поиск нескольких минимумов на отрезке. Задача поиска подстрок. Алгоритм Рабина-Карпа. Конечный автомат. Алгоритм Бойера-Мура.
- •Метод хеширования
- •Алгоритм
- •Время работы
- •Алгоритм Бойера-Мура
- •Поиск со звездочками. Алгоритм Кнута-Морриса-Пратта.
- •Время работы
- •Алгоритм Ахо-Корасика.
- •Дерево ключевых слов (бор)
- •Пример дерева ключевых слов (бора)
- •Построение бора
- •Поиск строки в бору
- •Автомат Ахо-Корасик
- •Суффиксное дерево, Алгоритм Укконена.
- •2. Квадратичный алгоритм
- •3. Линейный алгоритм
- •Суффиксный массив.
- •Наивный алгоритм поиска
- •Алгоритм, использующий префиксы циклических сдвигов
- •Исключения
- •Шаблоны
- •Stl: итераторы
- •Сортировка и поиск в stl. Алгоритмы stl
- •Куча в stl. Алгоритмы stl.
- •Ассоциативный массив. Интерфейс, варианты реализации.
Доказательство
| Теорема: | 
| = . | 
| Доказательство: | 
| 
			 | 
| 
			Положим  Заметим,
			что 
 и  
 Суммируя,
			получаем, что 
 имеет
			минимальное значение на отрезке,
			покрывающем 
,
			и принадлежит отрезку 
,
			отсюда  | 
| 
 | 
Сложность
Следующий алгоритм строит
декартово дерево за 
.
Используя Сведение
задачи LCA к задаче RMQ, получаем: препроцессинг
для 
 — 
 и
ответ на запрос — 
.
В итоге получили  с
построением за 
 и
ответом на запрос за 
.
 с
построением за 
 и
ответом на запрос за 
.
Процесс построения дучи по массиву:
Stack.push(A[0])
For (i = 1; i < n; i++)
If(A[i] >= A[stack.top])
s.top()->right = i;
s.push(i);
else
while(A[i] < A[s.top])
cur = s.top();
s.pop();
i->left = cur;
s.top()->right = I;
s.push(i);
Restricted RMQ
Алгоритм
Фарака-Колтона, Бендера (алгоритм
Фарах-Колтона, Бендера) —
применяется для решения за  времени
специального случая задачи RMQ (поиск
минимума на отрезке), в котором соседние
элементы входной последовательности
различаются на ±1. Может быть использован
также для решения
задачи LCA.
 времени
специального случая задачи RMQ (поиск
минимума на отрезке), в котором соседние
элементы входной последовательности
различаются на ±1. Может быть использован
также для решения
задачи LCA.
Вход: последовательность  длины
 длины  ,
соседние элементы которой отличаются
на ±1.
Выход: ответы
на онлайн запросы вида «позиция минимума
на отрезке
,
соседние элементы которой отличаются
на ±1.
Выход: ответы
на онлайн запросы вида «позиция минимума
на отрезке  ».
».
Алгоритм
Части, из которых состоит ответ на запрос RMQ
Данный
алгоритм основывается на методе решения
задачи RMQ с помощью разреженной
таблицы (sparse table, ST) за  .
.
Чтобы
избавиться от логарифма используется
предподсчёт ответа для небольших
подстрок входной последовательности.
Разделим последовательность 
 на
блоки длины  .
Для каждого блока вычислим минимум на
нём и определим
.
Для каждого блока вычислим минимум на
нём и определим  как
позицию минимального элемента в 
-том
блоке.
 как
позицию минимального элемента в 
-том
блоке.
На новой последовательности построим разреженную таблицу. Теперь для ответа на запрос RMQ , если и находятся в разных блоках, нам необходимо вычислить следующее:
- минимум на отрезке от до конца содержащего блока; 
- минимум по всем блокам, находящимся между блоками, содержащими и ; 
- минимум от начала блока, содержащего , до . 
Ответом на запрос будет позиция меньшего из эти трёх элементов.
Второй элемент мы уже умеем находить за с помощью и ST. Осталось научиться находить минимум по отрезку, границы которого не совпадают с границами блоков.
Минимум внутри блока
| Утверждение: | 
| 
			Если
			две последовательности  | 
Таким образом, мы можем нормализовать блок, вычтя из всех его элементов первый. Тем самым мы значительно уменьшим число возможных типов блоков.
| Утверждение: | 
| 
			Существует  | 
| 
 | 
| 
			Соседние
			элементы в блоках отличаются на ±1.
			Первый элемент в нормализованном
			блоке всегда равен нулю. Таким образом,
			каждый нормализованный блок может
			быть представлен ±1-вектором длины  | 
| 
 | 
Осталось
создать 
 таблиц
— по одной для каждого типа блока. В
такую таблицу необходимо занести
предподсчитанные ответы на все возможные
запросы минимума внутри блока
соответствующего типа, коих  .
Для каждого блока в 
 необходимо
заранее вычислить его тип. Таким образом
мы получили возможность отвечать на
запрос минимума по любой части блока
за 
,
затратив на предподсчёт
.
Для каждого блока в 
 необходимо
заранее вычислить его тип. Таким образом
мы получили возможность отвечать на
запрос минимума по любой части блока
за 
,
затратив на предподсчёт  времени.
 времени.

 
 .
. не
			принадлежат одновременно либо правому,
			либо левому поддереву 
,
			потому как тогда бы соответствующий
			сын находился на большей глубине,
			чем 
,
			и также являлся предком как 
 так
			и 
,
			что противоречит определению
 не
			принадлежат одновременно либо правому,
			либо левому поддереву 
,
			потому как тогда бы соответствующий
			сын находился на большей глубине,
			чем 
,
			и также являлся предком как 
 так
			и 
,
			что противоречит определению  .
			Из этого замечанию следует, что 
 лежит
			между 
 и 
 и,
			следовательно, принадлежит отрезку
.
			Из этого замечанию следует, что 
 лежит
			между 
 и 
 и,
			следовательно, принадлежит отрезку  .
По
			построению мы также знаем, что:
.
По
			построению мы также знаем, что: .
. и
 и  таковы,
			что все их элементы на соответствующих
			позициях различаются на одну и ту же
			константу (т.е.
 таковы,
			что все их элементы на соответствующих
			позициях различаются на одну и ту же
			константу (т.е.  ),
			то любой запрос RMQ даст один и тот же
			ответ для обеих последовательностей.
),
			то любой запрос RMQ даст один и тот же
			ответ для обеих последовательностей. различных
			типов нормализованных блоков.
 различных
			типов нормализованных блоков. .
			Таких векторов
.
			Таких векторов  .
.