- •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. Перемножение последовательности матриц.
58. Стягивающие деревья. Нахождение стягивающего дерева методом поиска в ширину
Для произвольного неориентированного графа G = <V, Е> каждое дерево <V, Т>, где ТсЕ, будем называть стягивающим деревом или каркасом графа G. Ребра такого графа (дерева) назовем ветвями, а остальные ребра графа G будем называть хордами.
Поиск в ширину. О(n+m)
1.BEGIN
2.FOR uV DO НОВЫЙ[u] := true; {инициализация}
3.T :=; {множество найденных к этому времени ветвей}
4.ОЧЕРЕДЬ := ; ОЧЕРЕДЬ r;
5. НОВЫЙ[r] := false; {г - корень стягивающего дерева}
6.WHILE ОЧЕРЕДЬ DO BEGIN
7.v <= ОЧЕРЕДЬ;
8.FOR u СПИСОК[u] DO
9.IF НОВЫЙ[u] THEN BEGIN
10.ОЧЕРЕДЬ <= и; НОВЫЙ[u] := false; Т := Т {v, u}
END END END return T
59. Стягивающие деревья. Нахождение стягивающего дерева методом поиска в глубину.
Для произвольного неориентированного графа G = <V, Е> каждое дерево <V, Т>, где ТсЕ, будем называть стягивающим деревом или каркасом графа G. Ребра такого графа (дерева) назовем ветвями, а остальные ребра графа G будем называть хордами.
В глубину. С(n+m)
исходный граф G = <V, E> задан списками инцидентности.
Алгоритм DFS-T(G)
1. For each v do Mark[v]<-0
2.T 3.dfst(v0)
Dfst(v)1.Mark[v]1
2.for each wV, смеж. С v do
3.if Mark[v]=0 then
4.TT{(v,w)}
5.dfst(w)
6.end if;end for
60.Минимальные покрывающие деревья. Алгоритм Прима
Остовным(покрывающим) деревом называется подграф, не содержащий циклов, включающий все вершины исходного графа, для которого сумма весов ребер минимальна. Минимальное остовное дерево в связанном, взвешенном, неориентированном графе — это остовное дерево этого графа, имеющее минимальный возможный вес, где под весом дерева понимается сумма весов входящих в него рёбер. В методе Прима от исходного графа переходим к его представлению в виде матрицы смежности. На графе выбирается произвольная вершина. Выбранная вершина образует первоначальный фрагмент остовного дерева. Затем анализируются веса ребер от выбранной вершины до оставшихся невыбранных вершин. Выбирается минимальное ребро, которое указывает на следующую выбранную вершину, и т.д. процесс продолжается до тех пор, пока в остновное дерево не будут включены все вершины исходного графа.
Алгоритм Prim(G,T)
1.T ; w {v0};
2.while wv do
3.среди ребер, соед. W и V-W найти ребро (w,v) с наименьшим весом; 4.TT{(w,v)};5.WV{v};
6.end while;
7.return T
61.Минимальные покрывающие деревья. Алгоритм Крускала.
Остовным (покрывающим) деревом называется подграф, не содержащий циклов, включающий все вершины исходного графа, для которого сумма весов ребер минимальна. Минимальное остовное дерево в связанном, взвешенном, неориентированном графе — это остовное дерево этого графа, имеющее минимальный возможный вес, где под весом дерева понимается сумма весов входящих в него рёбер. Алгоритм Крускала. Вычислительная сложность: Сортировка(mlogn), Основная часть(n2). Первоначально каждая вершина(v1,v2…) исходного графа помещается в одноэлементное множество, где все вершины изолированы (поэтому считается что множество Ws имеет вид: Ws={{v1},{v2},…,{vn}}. Ребра сортируются по возрастанию. Ребро включается в остовное дерево, если оно связывает вершины, принадлежащие разным множествам. Алгоритм заканчивает работу, когда все вершины объединяются в одно множество, при этом оставшиеся ребра не включаются в оставное дерево. E-количества ребер,V-вершин.
Алгоритм Kruskal(G)
1.for each viV do Mark[vi]I;
2.T<-; LESort[E];
3.while |T|<|v|-1 do
4.(v,w)min(LE)
5.if Mark[v]Mark[w] then
6.TT{(v,w)};
7.zMark[w];
8.for each uV do
9.if Mark[u]=z then
10.Mark[u]Mark[v] end if;
11.end for;
12.end if;
13.LE LE –{(v,w)};
14.end while.