
- •Граф. Ориентированный граф. Представления графа. Обход графа в глубину и в ширину.
- •Топологическая сортировка. Подсчет числа путей в орграфе.
- •Сильно связные компоненты.
- •Поиск кратчайших путей в графе. Алгоритм Флойда. Алгоритм Дейкстры. Алгоритм Форда-Беллмана.
- •Алгоритм a*. Эвристики.
- •Минимальное остовное дерево. Алгоритм Прима. Биномиальная куча.
- •Амортизационная стоимость. Фибоначчиева куча. Амортизационная стоимость (анализ)
- •Метод потенциалов
- •Фибоначчиева Куча
- •Структура
- •Время работы
- •Система непересекающихся множеств. Алгоритм Крускала.
- •Наивная реализация
- •Эвристика сжатия пути
- •Эвристика объединения по рангу
- •Потоки, Форда-Фалкерсона.
- •Декартово дерево
- •Дерево Фенвика. Дерево отрезков и динамическое программирование для rmq.
- •Сведение rmq к lca и наоборот.
- •Препроцессинг
- •Ответы на запросы
- •Алгоритм
- •Доказательство
- •Сложность
- •Алгоритм
- •Минимум внутри блока
- •Результат
- •Поиск нескольких минимумов на отрезке. Задача поиска подстрок. Алгоритм Рабина-Карпа. Конечный автомат. Алгоритм Бойера-Мура.
- •Метод хеширования
- •Алгоритм
- •Время работы
- •Алгоритм Бойера-Мура
- •Поиск со звездочками. Алгоритм Кнута-Морриса-Пратта.
- •Время работы
- •Алгоритм Ахо-Корасика.
- •Дерево ключевых слов (бор)
- •Пример дерева ключевых слов (бора)
- •Построение бора
- •Поиск строки в бору
- •Автомат Ахо-Корасик
- •Суффиксное дерево, Алгоритм Укконена.
- •2. Квадратичный алгоритм
- •3. Линейный алгоритм
- •Суффиксный массив.
- •Наивный алгоритм поиска
- •Алгоритм, использующий префиксы циклических сдвигов
- •Исключения
- •Шаблоны
- •Stl: итераторы
- •Сортировка и поиск в stl. Алгоритмы stl
- •Куча в stl. Алгоритмы stl.
- •Ассоциативный массив. Интерфейс, варианты реализации.
Амортизационная стоимость. Фибоначчиева куча. Амортизационная стоимость (анализ)
Амортизационный
анализ
— метод подсчета времени, требуемого
для выполнения последовательности
операций над структурой данных. При
этом время усредняется по всем выполняемым
операциям, и анализируется средняя
производительность операций в худшем
случае.
Такой
анализ чаще всего используется, чтобы
показать, что даже если некоторые из
операций последовательности являются
дорогостоящими, то при усреднении по
всем операциям средняя их стоимость
будет небольшой за счёт низкой частоты
встречаемости. Это оценка среднего
времени выполнения операций для худшего
случая.
Средняя
амортизационная стоимость операций
— величина
,
находящаяся по формуле:
,
где
-
время выполнения операций
совершённых
над структурой данных.
Амортизационный
анализ использует следующие методы:
1.
Метод усреднения (метод группового
анализа).
2.
Метод потенциалов.
3.
Метод предоплаты (метод бухгалтерского
учета).
Метод
усреднения
В
методе усреднения амортизационная
стоимость операций определяется напрямую
по формуле, указанной выше: суммарная
стоимость всех операций алгоритма
делится на их количество.
Пример
Рассмотрим
стек с операцией
—
извлечение из стека
элементов.
В худшем случае она работает за
времени,
если удаляются все элементы массива.
Однако прежде чем удалить элемент, его
нужно добавить в стек. Итак, если в стеке
было не более
элементов,
то в худшем случае с каждым из них могли
быть произведены 2 операции - добавление
в стек и извлечение из него. Например,
если было
операций
-
добавление в стек, стоимость каждой
,
и одна операция
,
то суммарное время всех операций —
,
всего операций
,
а значит, амортизационная стоимость
операции —
.
Метод предоплаты Представим, что использование определенного количества времени равносильно использованию определенного количества монет (плата за выполнение каждой операции). В методе предоплаты каждому типу операций присваивается своя учётная стоимость. Эта стоимость может быть больше фактической, в таком случае лишние монеты используются как резерв для выполнения других операций в будущем, а может быть меньше, тогда гарантируется, что текущего накопленного резерва достаточно для выполнения операции.
Мы должны выбирать учетные стоимости так, чтобы сумма фактических стоимостей не превосходила суммы учетных стоимостей, то есть, чтобы резерв оставался неотрицательным в любой момент работы.
Пример
Опять
же рассмотрим стек с операцией
.
При выполнении операции
будем
использовать две монеты — одну для
самой операции, а вторую — в качестве
резерва. Тогда для операций
и
учётную
стоимость можно принять равной нулю и
использовать для удаления элемента
монету, оставшуюся после операции
.
Таким
образом, для каждой операции требуется
монет,
а значит, cредняя амортизационная
стоимость операций
.
Метод потенциалов
Обобщение
метода предоплаты. Самый точный
Введём
для каждого состояния структуры данных
величину
—
потенциал (функция из множества состояний
структуры в действительные числа).
Изначально потенциал равен
,
а после выполнения
-ой
операции —
.
Стоимость
-ой
операции обозначим
.
Если удалось придумать такую Ф, что
Ф(Dn)
>= Ф(D0),
то суммарная учетная стоимость даст
верхнюю оценку для реальной стоимости
n
операций.
Сумма ai >= сумма ti
Пример
В качестве примера вновь рассмотрим стек с операцией . Пусть потенциал — это количество элементов в стеке. Тогда:
1.1)
т.
к. время выполнения операции
—
1, и изменение потенциала — тоже 1.
1.2)
т.
к. время выполнения операции
—
1, а изменение потенциала — -1.
1.3)
т.
к. время выполнения операции
—
k, а изменение потенциала — -k.
Коль скоро учетная стоимость каждой операции не превосходит 2, стоимость последовательности n операций, начинающихся с пустого стека – есть O(n).