
- •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. Перемножение последовательности матриц.
42. Вставка с убывающим шагом.
Рассматриваются пары с шагом h/2, если элем не упорядочены, то меняем их местами.
Рассматриваются группы с шагом h/4, выполняем сортировку в группах,
уменьшаем шаг и т.д. Проходим по всему массиву.
Простая вставка n2/4 – вычислительная сложность.
Вычислительная сложность O(n(logn)2)
Пример: Для примера возьмем 16 элементов [1..16]. Сначала просматриваются пары с шагом 8. Это пары элементов 1-9, 2-10, 3-11, 4-12, 5-13, 6-14, 7-15, 8-16. Если значения элементов в паре не упорядочены по возрастанию, то элементы меняются местами. Назовем этот этап 8-сортировкой. Следующий этап - 4-сортировка, на котором элементы в файле делятся на четверки: 1-5-9-13, 2-6-10-14, 3-7-11-15,4-8-12-16. Выполняется сортировка в каждой четверке. Сортировка может выполняться методом простых вставок (п.1). Следующий этап - 2-сортировка, когда элементы в файле делятся на 2 группы по 8:
1-3-5-7-9-11-13-15 и 2-4-6-8-10-12-14-16. Выполняется сортировка в каждой восьмерке. Наконец весь файл упорядочивается методом простых вставок.
ShellSort(x, n, hs, s)
For i: = s downto 1 do
H:=hs
For j:=h+1 to n do begin
Y:=x[j]
k:=j-h
while (k>=1) and (y<x[k]) do begin
x[k+h]:=x[k]
k:=k-h
end
x[k+h]:=y
end;
end;
43. Быстрая сортировка.
Среднее
время работы .
Время работы алгоритма для массива
из
элементов
в худшем случае может составить
,
на практике этот алгоритм является
одним из самых быстрых.
Алгоритм:
из массива выбирается некоторый опорный элемент
.
запускается процедура разделения массива, которая перемещает все ключи, меньшие, либо равные
, влево от него, а все ключи, большие, либо равные
— вправо.
для обоих подмассивов: если в подмассиве более двух элементов, рекурсивно запускаем для него ту же процедуру.
QuickSort(A,first, last)
If first<last then
Q<–Partition(A,first,last)
QuickSort(A,first, q)
QuickSort(A,q+1, last)
Partition
X<-A[first]
I<-first-1;
J<-last+1
While true do
Repeat j<-j-1
untilA[j]=<x
Repeat i<-i+1
untilA[j]>=x
if i<j then A[i}<–>A[j]
else rerurn j;
44. Быстрая двоичная сортировка.
Бинарная быстрая сортировка по старшему разряду. На каждом уровне рекурсии рассматриваем старший бит из еще нерассмотренных. Числа с нулевым битом - в левую часть подмассива, с единичным - в правую. Закончили - делаем то же самое со след. битом в каждом из подмассивов.
Алгоритм:
1.последовательно вставляем элементы исходно массива в БДП
2.выполняем симметричный обход сформированного дерева
3. при посещении узлов – копируем содержимое в выходной массив
Время работы алгоритма:
O(log2n) – лучший; O(n) – худший; O(nlog2n) – вставок элементов.
Минус – повышенные требования к объему памяти.
Алгоритм Sort(A[1..n, first, last,d)
if (first<last) and (d>0) then
I <- first-1
J<-last+1
While i<j do
Repeat j<-j-1
Until ((digit(A[i],d)=0) or (j<=i)
Repeat i<-i+1
Until ((digit(A[i],d)=1) or (i>=j)
If i<j then A[i]<->A[j]
End while
SortB(A[1..n], first,j,d-1)
SortB(a[1..n],j+1,last,d+1)
End if