- •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. Перемножение последовательности матриц.
24. Добавление элемента в двоичном дереве поиска.
Добавление элемента
Дано: дерево Т и элемент K.
Задача: добавить элемент K в дерево Т.
Алгоритм:
Если дерево пусто, заменить его на дерево с одним корневым узлом (K, ПУСТО, ПУСТО) и остановиться.
Иначе сравнить K с ключом корневого узла X.
Если K>=X, рекурсивно добавить (K,V) в правое поддерево Т.
Если K<X, рекурсивно добавить (K,V) в левое поддерево Т.
Алгоритм InsertTree (T, k) //k – добавляемое значение
1. if T=nil
2. New (T)
3. T^.key←k
4. T^.left←nil
5. T^.right←nil
6. else
7. if (k<T^.key) then InsertTree (T^.left, k)
8. else InsrtTree (T^.right, k)
9. end if
10. end if
11. return T
Рассмотрим, например, вставку узла 8 в дерево BinSTree_1. Начав с корневого узла 25, определяем, что узел 8 должен быть в левом поддереве узла 25 (8<25). В узле 10 определяем, что место узла 8 должно быть в левом поддереве узла 10, которое в данный момент пусто. Узел 8 вставляется в дерево в качестве левого сына узла 10.
Вычислительная сложность.
Средний вариант – O(log n), худший случай – O(n).
25. Удаление элемента в двоичном дереве поиска.
Удаление узла
Дано: дерево Т с корнем n и ключом K.
Задача: удалить из дерева Т узел с ключом K (если такой есть).
Алгоритм:
Если дерево T пусто, остановиться
Иначе сравнить K с ключом X корневого узла n.
Если K>X, рекурсивно удалить K из правого поддерева Т.
Если K<X, рекурсивно удалить K из левого поддерева Т.
Если K=X, то необходимо рассмотреть два случая.
Если одного из детей нет, то значения полей второго ребёнка m ставим вместо соответствующих значений корневого узла, затирая его старые значения, и освобождаем память, занимаемую узлом m.
Если оба потомка присутствуют, то
найдём узел m, являющийся самым левым узлом правого поддерева;
скопируем значения полей (ключ, значение) узла m в соответствующие поля узла n.
у предка узла m заменим ссылку на узел m ссылкой на правого потомка узла m (который, в принципе, может быть равен ПУСТО).
освободим память, занимаемую узлом m (на него теперь никто не указывает, а его данные были перенесены в узел n).
Алгоритм Delete (T, k)
1. if T≠nil then
2. if k<T^.key then Delete (T^.left, k)
3. else if k>T^.key then Delete (T^.right, k)
4. else
5. if (T^.left=nil) and (T^.right=nil) then
6. p←T, T←nil, Dispose (p)
7. else if (T^.left=nil) then
8. p←T, T←T^.right, Dispose (p)
9. else if (T^.right=nil) then
10. p←T, T←T^.left, Dispose (p)
11. else Del (T^.right, p)
Del (T, p)
1. if T^.left=nil then
2. p^.key←T^.key
3. p1←T
4. T←T^.right
5. Dispose (p1)
6. return
7. else
8. Del (T^.left, p)
Вычислительная сложность.
Средний вариант – O(log n), худший случай – O(n).
26. Абстрактная таблица. Основные операции. Способ реализации.
Таблица – одна из важнейших структур данных, применяемая для хранения. Таблица состоит из совокупности элементов, снабженных отличительными признаками, называемыми ключами.
Одна строчка в таблице называется записью. Каждая колонка таблицы называется полем.
Одно или несколько полей играют особую роль и используются при поиске элементов. Их называют ключами записи. Ключи используются для доступа к элементам таблицы.
Таблицы данных классифицируются по различным признакам:
По месту хранения
В оперативной памяти
Во внешней памяти
По отношению связей между элементами
Линейная
Нелинейная
По упорядоченности элементов
Упорядоченные
Неупорядоченные
Операции:
Включить в таблицу новый элемент.
Удалить из таблицы элемент, поисковый ключ которого совпадает с заданным элементом.
Извлечь из таблицы элемент, поисковый ключ которого совпадает с заданным элементом.
Обойти элементы таблицы в порядке следования их поисковых ключей.
Определить, пуста ли таблица.
Определить количество элементов в таблице.
Организации таблицы делятся на линейные и нелинейные.
Способ реализации:
Линейный
Неупорядоченный массив
Неупорядоченный связный список
Упорядоченный массив
Упорядоченный связный список
Нелинейный
Бинарное дерево поиска
Сбалансированное дерево поиска
Хеш-таблица
Б-дерево
Вычислительная сложность
|
Вставка |
Удаление |
Поиск |
Обход |
Неупорядоченный массив |
O(1) |
O(n) |
O(n) |
O(n) |
Неупорядоченный список |
O(1) |
O(n) |
O(n) |
O(n) |
Упорядоченный массив |
O(n) |
O(n) |
O(log n) |
O(n) |
Упорядоченный список |
O(n) |
O(n) |
O(n) |
O(n) |
Бинарное дерево поиска |
O(log n) |
O(log n) |
O(log n) |
O(n) |