- •16. Обход n-арного дерева. Алгоритмы обхода n-арного дерева.
- •17.Бинарные деревья – основные определения, свойства и теоремы.
- •18,19.Не рекурсивные алгоритмы обхода бинарного дерева.
- •20.Поиск в упорядоченных таблицах. Последовательный поиск в массиве.
- •21.Поиск в упорядоченных таблицах. Двоичный поиск в массиве. Фибоначчиев поиск. Интерполяционный поиск.
- •22. Поиск в линейном списке.
- •23.Двоичное дерево поиска. Свойства. Основные операции.
- •Iterative_Tree_Search(t,k).
- •24. Добавление элемента в двоичном дереве поиска.
- •25. Удаление элемента в двоичном дереве поиска.
- •26. Абстрактная таблица. Основные операции. Способ реализации.
- •27. Авл – деревья. Свойства. Вращение. Высота авл-дерева (теорема) Определение и свойства авл-дерева
- •Авл - дерево
- •Повороты при балансировке
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •29. Удаление вершины в авл – дереве.
- •Алгоритм на псевдокоде
- •30. Красно – черные деревья. Свойства. Вращение. Высота красно – черного дерева.
- •Повороты
- •Операции поворота в бинарном дереве поиска
- •31. Добавление вершины в красно – черном дереве.
- •32. Удаление вершины в красно – черном дереве.
- •33. 2-3 Деревья. Основные свойства. Высота 2-3 дерева.
- •34 Обход 2-3 дерева.
- •35 Добавление элемента в 2 – 3 дерево.
- •36 Удаление элемента в 2 – 3 дереве.
- •37 2 – 3 – 4 Деревья. Основные свойства. Высота 2 – 3 – 4 дерева.
- •38 Добавление элемента в 2 – 3 – 4 дерево.
- •39. Стратегии внутренней сортировки.
- •40. Турнирная сортировка.
- •41. Пирамидальная сортировка.
- •42. Вставка с убывающим шагом.
- •43. Быстрая сортировка.
- •44. Быстрая двоичная сортировка.
- •45. Цифровая сортировка.
- •46. Карманная (блочная) сортировка.
- •47. Сортировка подсчетом
- •48. Сортировка слиянием. Рекурсивный алгоритм
- •49. Нижняя граница вычислительной сложности алгоритмов сортировки.
- •50. Поиск в глубину в графе. Рекурсивный алгоритм.
- •51. Поиск в ширину в графе. Не рекурсивный алгоритм.
- •52. Топологическая сортировка. Алгоритм топологической сортировки.
- •58. Стягивающие деревья. Нахождение стягивающего дерева методом поиска в ширину
- •59. Стягивающие деревья. Нахождение стягивающего дерева методом поиска в глубину.
- •60.Минимальные покрывающие деревья. Алгоритм Прима
- •61.Минимальные покрывающие деревья. Алгоритм Крускала.
- •62. Нахождение кратчайших путей в графе. Алгоритм Форда – Беллмана
- •63 Поиск кратчайших путей в графе. Алгоритм Дэйкстры.
- •64 Пути в бесконтурном графе.
- •65 Алгоритм Флойда поиска кратчайших путей между всеми парами вершин
- •66. Открытое хеширование.
- •67. Хеш-функции (ключи как натуральные числа, деление с остатком, умножение).
- •68. Закрытое хеширование. (Линейная последовательность проб. Квадратичная последовательность проб. Двойное хеширование).
- •69 Алгоритм Кнута-Морриса-Пратта.
- •70 Поиск подстрок. Алгоритм Бойера-Мура.
- •71. Поиск подстрок. Алгоритм Рабина-Карпа
- •72 Равномерный и неравномерный код. Префиксное кодирование.
- •73. Алгоритм Шеннона – Фано
- •74. Сжатие информации. Метод Хаффмана.
- •75. Исчерпывающий перебор. Задачи коммивояжера. Задача о назначениях.
- •77. Метод ветвей и границ. Задача о назначениях. Задача о рюкзаке. Задача коммивояжера.
- •Постановка задачи коммивояжера
- •Алгоритм решения задачи коммивояжера Жадный алгоритм
- •Полный перебор
- •78. Динамическое программирование. Восходящее и нисходящее динамическое программирование
- •79.Задача определения наиболее длинной общей подпоследовательности.
- •80. Перемножение последовательности матриц.
64 Пути в бесконтурном графе.
Общая теория:
У нас есть граф G=(V,E), где связь между вершинами v и w следующая: a(v,w) E. Если связь между вершинами отсутствует, то a(v,w)=.
Если последняя вершина wo, w1, …, wn определяет путь в графе, то его длина равна суммарному весу входящих вершин:
Наша задача – нахождение кратчайшего пути между вершинами S, t. M(S,t) – расстояние между S и t.
Путь из S в t, который имеет минимальную длину – есть кратчайший путь, между вершинами S и t.
d(S,t)=d(S,vk) + a(vk,t)
d(S,vk)=d(S,vk-1)+a(vk-1,vk)
vk-1 vk
t
S
Поиск кратчайшего пути в бесконтурном графе:
Поиск кратчайшего пути в бесконтурном графе имеет 2 части. Первая переименование вершин графа так, что первая вершина не имеет входящих вершин. Вторая часть сам поиск кратчайших путей.
Для начала зададим произвольный бесконтурный граф с произвольной нумерацией и весами.
Рисунок 3.1. – Заданный граф.
И запишем его в виде матрице смежности, где ребра которые не входят в другие ребра будем отмечать максимально большим числом 32767.
Рисунок 3.2 – Матрица смежности.
Для перенумерации графа, так чтобы вершина №1 имела только исходящие ребра, используем алгоритм Topolsoft.
Алгоритм Topolsoft (G,N)
for each v ϵ V do p[v] 0
for each w ϵ V do
for each v ϵ V
p[v] p[v]+1
end for
end for
Стек
for each v ϵ V do
if p[v] = 0 then
Стек v
end if
end for
num 0
while Стек ≠ do
w Стек
num num+1
N[w] num
for each v ϵ V
p[v] p[v]-1
if p[v] = 0 then Стек v
end if
end for
end while
end for
После чего получим следующую нумерацию графа.
Рисунок 3.3. – Переименованный граф.
Алгоритм поиска наикратчайших путей.
После можно найти кратчайшие расстояния от вершины №1 до каждой из вершин по алгоритму DSP.
Алгоритм DSP(G, N, d)
for j = 1 to n do d[vj]
d[v1] 0
for j = 2 to n do
for I = 1 to j-1 do
if d[vj] d[vi]+a[vi, vj] then
d[vj] d[vi]+a[vi, vj]
end if
end for
end for
end for
После выводим на экран результат. При этом вычислительная сложность считаем следующим образом:
И она составит:
65 Алгоритм Флойда поиска кратчайших путей между всеми парами вершин
Общая теория:
У нас есть граф G=(V,E), где связь между вершинами v и w следующая: a(v,w) E. Если связь между вершинами отсутствует, то a(v,w)=.
Если последняя вершина wo, w1, …, wn определяет путь в графе, то его длина равна суммарному весу входящих вершин:
Наша задача – нахождение кратчайшего пути между вершинами S, t. M(S,t) – расстояние между S и t.
Путь из S в t, который имеет минимальную длину – есть кратчайший путь, между вершинами S и t.
d(S,t)=d(S,vk) + a(vk,t)
d(S,vk)=d(S,vk-1)+a(vk-1,vk)
vk-1 vk
t
S
Алгоритм Флойда:
# (2)
1 2
(6) (7)
(3)
3 (1) 4
Матрица весов графа:
0 3
А= 2 0
7 0 1
6 0
Матрица расстояний графа:
0 10 3 4
D= 2 0 5 6
7 7 0 1
6 16 9 0
D(0) =A, D(1), D(k), D(k-1), …, D(n)=D
Каждая из этих матриц содержит кратчайшие пути с учетом ограничений.
dij(k) – количество промежуточных вершин не > k
dij(k)=min{ dij(k-1), dik(k-1) + dkj(k-1)}
Алгоритм Floyd (A[1…n,1…n])
D0A;
for k=1 to n do;
for i=1 to n do;
for j=1 to n do;
if dik(k-1) + dkj(k-1)< dij(k-1)then;
dij(k) dik(k-1) + dkj(k-1);
else dij(k) dij(k-1);
end for;
end for;
end for;
return T(n).
0 3
D(0)=А= 2 0
7 0 1
6 0
0 3 рассматриваем вершину 1 как промежуточную
D(1)= 2 0
7 0 1
6 0
0 3 рассматриваем вершину 1 и 2 как промежуточную
D(2)= 2 0
7 0 1
6 0
0 3 рассматриваем вершину 1и 2 и 3 как промежуточную
D(3)= 2 0
7 0 1
6 0
0 3
D(4)= 2 0
7 0 1
6 0
Вычислительная сложность:
O(n3).