
- •2 Данные. Типы данных. Структуры хранения данных.
- •4. Сложность алгоритма. Функции сложности. Оценка эффективности
- •5,6,7. Линейные структуры данных
- •8. Нелинейные структуры данных. Деревья.
- •9. Хуйня какая-то…
- •10 Простая сортировка
- •11 Сложные сортировки
- •13 Поиск
- •14 Поиск подстроки в строке.
- •15 Графы
- •16 Поиск в глубину и в ширину
- •17 Алгоритм построения остовного дерева
- •18 Поиск кратчайшего пути в графе
- •19 Кодирование
14 Поиск подстроки в строке.
Алгоритм Кнута-Морриса-Пратта (КМП) — поиск подстроки в строке.
Алгоритм Рабина: ищем подстроку длинной N, в строке длинной M. Вырежем окошечко размера N и будем двигать его по входной строке. Нас интересует, не совпадает ли слово в окошечке с заданным образцом. Заменим все буквы в слове и образце их номерами, представляющими собой целые числа. Тогда удобной функцией является сумма цифр. (При сдвиге окошечка нужно добавить новое число и вычесть пропавшее.), если сумма цифр не совпадает идем к следующему окошку.
Алгоритм Боера-Мура: подстрока в строке. Шаблон – искомая подстрока, Строка – текст в котором ищем. Первый символ шаблона….
15 Графы
Ориентированным графом называется пара G(V,E), где V — конечное множество вершин, а
E
V x V—
множество рёбер.
Мульти граф Неориентированный
граф
16 Поиск в глубину и в ширину
В глубину: обходим дерево по принципе ПарентЛевыйПравый
В ширину: обходим смежные вершины корня.
17 Алгоритм построения остовного дерева
Остовным деревом неориентированного графа будем называть его подграф, содержащий все его вершины и являющийся деревом. Остовное дерево графа, называется минимальным, если сумма весов всех его рёбер минимальна по сравнению с другими остовными деревьями.
Построение минимального остовного дерева методом Крускала:
Соединяем вершины наименьшим из всех ребер, так чтобы не образовались циклы и делаем это до тех пор, пока не охватим все вершины.
Построение минимального остовного дерева методом Прима:
Выбирается любая вершина.
Идем по наименьшему ребру к следующей вершине
Опять ищем наименьший путь уже от 2-ух вершин, и т.д. пока не охватим все вершины
18 Поиск кратчайшего пути в графе
Метод Дейкстры: В начале алгоритма расстояние для начальной вершины полагается равным нулю, а все остальные расстояния заполняются числом больше максимального возможного пути в графе. Массив флагов заполняется нулями. Затем запускается основной цикл. На каждом шаге цикла мы ищем вершину с минимальным расстоянием и флагом равным нулю. Затем мы устанавливаем в ней флаг в 1 и проверяем все соседние с ней вершины . Если в них расстояние больше, чем сумма расстояния до текущей вершины и длины ребра, то уменьшаем его. Цикл завершается, когда флаги всех вершин становятся равны 1.
Метод
Флойда: Пусть вершины графа пронумерованы
от 1 до n и введено обозначение
для длины кратчайшего пути от i
до j.
— длина ребра (j,i),
если таковое существует (в противном
случае его длина может быть обозначена
как
).
Существует два варианта значения :
Кратчайший путь между j и i не проходит через вершину k, тогда
Существует более короткий путь между j и i, проходящий через k, тогда он сначала идёт от j до k, а потом от k до j. В этом случае, очевидно
, k
[1, n];
Метод Беллмана: Построим матрицу AXY, элементы которой будут обозначать следующее: AXY — это длина кратчайшего пути из S в X, содержащего не более Y рёбер. Путь, содержащий 0 рёбер, существует только до вершины S. Таким образом, AX0 равно 0 при X = S, и +∞ в противном случае.
Теперь рассмотрим все пути из S в X, содержащие ровно Y рёбер. Каждый такой путь есть путь из (Y-1) ребра, к которому добавлено последнее ребро. Если про пути длины (Y-1) все данные уже подсчитаны, то определить Y-ый столбец матрицы не составляет труда.