- •1. Типы данных
- •2. Стандартные типы пользователя
- •3. Структуры данных
- •4. Классификация структур данных
- •Векторы
- •5. Записи и таблицы.
- •34. Сортировка методом прямого включения
- •6. Понятие списковой структуры. Стек.
- •7. Очередь.
- •Insert (q, X)
- •8) Пример работы с очередью с использованием стандартных процедур.
- •9.Кольцевые полустатические очереди. Операции над кольцевой очередью
- •10. Понятие Динамических структур данных. Организация односвяз. И двусвяз. Списков. Простейшие операции над односвяз списками
- •11. Реализация стеков с помощью (односвязных) списков
- •12. Смысл и организация операций создания и удаления элемента динамической структуры. Понятие свободного списка и пула свободных эл-ов. Утилизация освободившихся элементов
- •13. Очередь и операции над ней при реализации со связными списками.
- •14. Операции вставки и извлечения элементов из списка. Сравнение этих операций с аналогичными массивами. Недостаток связного списка по сравнению с массивом.
- •1 5. Пример алг реш зад извлечения эл-ов из списка по заданному признаку.
- •16. Пример алг решения зад. Вставки заданных элементов в упорядоченный список.
- •17. Элементы заголовков в списках; нелинейные связные структуры.
- •18. Понятие рекурсивных структур данных. Деревья, их признаки и представления
- •19. Алгоритм сведения m-арного дерева к бинарному; основные операции над деревьями; виды обхода
- •20. Понятие поиска, ключей; назначение и структура алгоритмов поиска
- •21. Последовательный поиск и его эффективность
- •22. Индексно-последовательный поиск
- •23. Переупорядочивание таблиц с учетом вероятности поиска элемента; переупорядочивание путем перестановки в начало списка
- •24) Метод оптимизации поиска путем (Переупорядочивание таблицы) перестановки найденного элемента в начало списка
- •25. Метод транспозиции при оптимизированном поиске (для переупорядочивания таблицы поиска
- •26. Бинарный поиск
- •27. Алгоритм создания упорядоченного бинарного дерева
- •29. Поиск по бинарному дереву с включением
- •33. Сортировка методом прямого выбора
- •30. Поиск по бинарному дереву с удалением
- •28. Эффективность поиска по бинарному дереву
- •31. Алгоритмы прохождения бинарных деревьев
- •32. Понятие сортировки, ее эффективность; классификация методов сортировки
- •35. Сортировка методом прямого обмена (пузырьковая).
- •36. Быстрая сортировка
- •37. Сортировка Шелла
- •38. Сортировка с помощью бинарного дерева
- •39. Сравнительный анализ эффективности методов сортировки
- •40. Нерекурсивный алгоритм обхода дерева в прямом порядке
25. Метод транспозиции при оптимизированном поиске (для переупорядочивания таблицы поиска
В данном методе найденный элемент переставляется на один элемент к голове списка. И если к этому элементу обращаются часто, то, перемещаясь к голове списка, он скоро окажется на первом месте.
p – рабочий указатель;
q – вспомогательный указатель, отстает на один шаг от p;
s – вспомогательный указатель, отстает на два шага от q.
Алгоритм метода транспозиции:
s = nil
q = nil
p = table
while (p <> nil) do
if key = k(p) then ‘ нашли, транспонируем
if q = nil then ‘ переставлять не надо
return
endif
nxt(q)= nxt(p)
nxt(p) = q
if s = nil then
table = p
else
nxt(s) = p
search = p
endif
return
endif
s =q
q = p
p = nxt(p)
endwhile
search = nil
return
Этот метод удобен при поиске не только в списках, но и в массивах (так как меняются два стоящих рядом элемента).
26. Бинарный поиск
Метод используется только для отсортированных массивов.
Допустим необходимо найти элемент с ключом 52.
Обозначим: low - индекс нижней границы интервала поиска hi - индекс верхней границы интервала поиска
mid - индекс середины интервала поиска
Алгоритм бинарного поиска
low = 1
hi = n
while (low <= hi) do
mid = (low + hi) div 2
if key = k(mid) then
search = mid
return
endif
if key < k(mid) then
hi = mid - 1
else
low = mid + 1
endif
endwhile
search = 0
return
Эффективность бинарного поиска
Количество сравнений при бинарном поиске (эффективность) имеет порядок О(log2N)
27. Алгоритм создания упорядоченного бинарного дерева
Пусть заданы элементы с ключами: 14, 18, 6, 21, 1, 13, 15. После выполнения нижеприведенного алгоритма получится дерево, изображенное на рис.4.6. Если обойти полученное дерево слева направо, то получим упорядочивание: 1, 6, 13, 14, 15, 18, 21.
Паскаль
read (key, rec); tree:=maketree(key, rec); p:=tree; q:=tree; while not eof do begin
read (key, rec); v:=maketree(key, rec); while p<>nil do begin q:=p; if key<p^.k then
p:=p^.left; else p:=p^.right; end; if key<q^.k then p^.left:=v; else p^.right:=v; end if q=tree
then writeln(‘только корень’); exit
Если извлекаемые элементы сформировали некоторое постоянное множество, то может быть выгодным настроить дерево бинарного поиска для большей эффективности последующего поиска.
Рассмотрим деревья бинарного поиска, приведенные на рисунках a и b. Оба содержат три элемента – k1, k2, k3, где k1<k2<k3. Поиск элемента k3 требует двух сравнений для рисунка 5.6 а), и только одного –для рисунка 5.6 б). Число сравнений ключей, которые необходимо сделать для извлечения некоторой записи, равно уровню этой записи в дереве бинарного поиска плюс 1.
Предположим, что:
p1 – вероятность того, что аргумент поиска key=k1;
p2 – вероятность того, что аргумент поиска key=k2;
p3 – вероятность того, что аргумент поиска key=k3;
q0 – вероятность того, что key<k1;
q1 – вероятность того, что k2>key>k1;
q2 – вероятность того, что k3>key>k2;
C1 – число сравнений в первом дереве рисунка 5.6 а);
C2 – число сравнений во втором дереве рисунка 5.6 б).
Тогда .р1+р2+р3+q0+q1+q1+q2+q3 = 1
Ожидаемое число сравнений в некотором поиске есть сумма произведений вероятности того, что данный аргумент имеет некоторое заданное значение, на число сравнений, не обходимых для извлечения этого значения, где сумма берется по всем возможным значениям аргумента поиска. Поэтому
С1=2p1+1p2+2p3+2q0+2q1+2q2+2q3
C2=2p1+3p2+1p3+2q0+3q1+3q2+1q3
Это ожидаемое число сравнений может быть использовано как некоторая мера того, насколько “хорошо” конкретное дерево бинарного поиска подходит для некоторого данного множества ключей и некоторого заданного множества вероятностей. Так, для вероятностей, приведенных далее слева, дерево из а) является более эффективным, а для вероятностей, приведенных справа, дерево из б) является более эффективным:
Дерево бинарного поиска, которое минимизирует ожидаемое число сравнений некоторого заданного множества ключей и вероятностей, называется оптимальным. Хотя алгоритм создания дерева может быть очень трудоемким, дерево, которое он создает, будет работать эффективно во всех последующих поисках. К сожалению, однако, заранее вероятности аргументов поиска редко известны.