Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы экзамен.docx
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
53.95 Кб
Скачать

14 Поиск подстроки в строке.

Алгоритм Кнута-Морриса-Пратта (КМП) — поиск подстроки в строке.

Алгоритм Рабина: ищем подстроку длинной N, в строке длинной M. Вырежем окошечко размера N и будем двигать его по входной строке. Нас интересует, не совпадает ли слово в окошечке с заданным образцом. Заменим все буквы в слове и образце их номерами, представляющими собой целые числа. Тогда удобной функцией является сумма цифр. (При сдвиге окошечка нужно добавить новое число и вычесть пропавшее.), если сумма цифр не совпадает идем к следующему окошку.

Алгоритм Боера-Мура: подстрока в строке. Шаблон – искомая подстрока, Строка – текст в котором ищем. Первый символ шаблона….

15 Графы

Ориентированным графом называется пара G(V,E), где V — конечное множество вершин, а

E V x V— множество рёбер.

Мульти граф Неориентированный граф

16 Поиск в глубину и в ширину

В глубину: обходим дерево по принципе ПарентЛевыйПравый

В ширину: обходим смежные вершины корня.

17 Алгоритм построения остовного дерева

Остовным деревом неориентированного графа будем называть его подграф, содержащий все его вершины и являющийся деревом. Остовное дерево графа, называется минимальным, если сумма весов всех его рёбер минимальна по сравнению с другими остовными деревьями.

Построение минимального остовного дерева методом Крускала:

  1. Соединяем вершины наименьшим из всех ребер, так чтобы не образовались циклы и делаем это до тех пор, пока не охватим все вершины.

Построение минимального остовного дерева методом Прима:

  1. Выбирается любая вершина.

  2. Идем по наименьшему ребру к следующей вершине

  3. Опять ищем наименьший путь уже от 2-ух вершин, и т.д. пока не охватим все вершины

18 Поиск кратчайшего пути в графе

Метод Дейкстры: В начале алгоритма расстояние для начальной вершины полагается равным нулю, а все остальные расстояния заполняются числом больше максимального возможного пути в графе. Массив флагов заполняется нулями. Затем запускается основной цикл. На каждом шаге цикла мы ищем вершину с минимальным расстоянием и флагом равным нулю. Затем мы устанавливаем в ней флаг в 1 и проверяем все соседние с ней вершины . Если в них расстояние больше, чем сумма расстояния до текущей вершины и длины ребра, то уменьшаем его. Цикл завершается, когда флаги всех вершин становятся равны 1.

Метод Флойда: Пусть вершины графа пронумерованы от 1 до n и введено обозначение для длины кратчайшего пути от i до j.

— длина ребра (j,i), если таковое существует (в противном случае его длина может быть обозначена как ).

Существует два варианта значения :

  1. Кратчайший путь между j и i не проходит через вершину k, тогда

  2. Существует более короткий путь между 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-ый столбец матрицы не составляет труда.