- •Введение
- •1. Технология проектирования и реализации коллекций данных.
- •1.1. Постановка задачи.
- •1.2. Разработка структур данных и алгоритмов
- •1.3. Кодирование
- •1.4. Отладка и тестирование
- •1.5. Сопровождение
- •2. Лабораторная работа «Сортировка коллекции»
- •2.1. Алгоритмы внутренней сортировки
- •2.2. Задание к лабораторной работе
- •2.1.1. Варианты заданий
- •2.1.2. Методические указания к выполнению задания
- •2.3. Контрольные вопросы и упражнения.
- •3. Лабораторная работа «Коллекция данных - список».
- •3.1. Структуры списков
- •3.2. Задание к лабораторной работе
- •3.2.1. Варианты заданий:
- •3.2.2. Методические указания к выполнению задания
- •3.3. Контрольные вопросы и упражнения.
- •4. Лабораторная работа «Коллекция данных - дерево поиска».
- •4.1. Структуры bst - деревьев
- •4.2. Задание к лабораторной работе
- •4.2.1. Варианты задания
- •4.2.2. Методические указания к выполнению задания:
- •4.3. Контрольные вопросы и упражнения.
- •5. Лабораторная работа «Коллекция данных - сбалансированное дерево поиска»
- •5.1. Структуры сбалансированных деревьев
- •5.2. Задание к лабораторной работе
- •5.2.1. Варианты заданий:
- •5.2.2. Методические указания к выполнению задания
- •5.3. Контрольные вопросы и упражнения.
- •6. Лабораторная работа «Коллекция данных - хеш – таблица»
- •6.1. Функции хеширования
- •6.2. Разрешение коллизий и структуры хеш-таблиц
- •6.3. Трудоёмкость операций
- •6.4. Задание к лабораторной работе
- •6.4.1. Варианты заданий:
- •6.4.2. Методические указания к выполнению задания
- •6.5. Контрольные вопросы и упражнения.
- •Литература
- •Приложение a: Псевдокод. Основные правила и соглашения псевдокода
- •Алгоритм сортировки Шелла
- •Алгоритм пирамидальной сортировки
- •Рекурсивный алгоритм сортировки разделением
- •Итеративный алгоритм сортировки разделением
- •Рекурсивный алгоритм сортировки слиянием
- •Итеративный алгоритм сортировки слиянием
- •Рекурсивный алгоритм поразрядной msd-сортировки
- •Итеративный алгоритм поразрядной lsd-сортировки
- •Итеративный алгоритм вставки элемента в bst – дерево
- •Рекурсивный алгоритм удаления элемента из bst – дерева
- •Алгоритм вставки элемента в корень bst – дерева
- •Алгоритм поиска предыдущего по значению ключа узла bst – дерева
- •Алгоритм поиска k –го по значению ключа узла в bst – дереве
- •Алгоритм разбиения дерева на части
- •Алгоритм удаления из bst-дерева на основе объединения поддеревьев
- •Алгоритм объединения bst – деревьев
- •Алгоритм удаления элемента из рандомизированного дерева
- •Алгоритм вставки элемента в avl-дерево
- •Рекурсивный алгоритм вставки элемента в rb – дерево
- •Итеративный алгоритм вставки элемента в rb – дерево
- •Итеративный алгоритм удаления элемента из rb – дерева
- •Алгоритм вставки элемента в 2-3 - дерево
- •Алгоритм удаления элемента из 2-3 - дерева
- •Приложение д Алгоритмы операций для хеш-таблицы с открытой адресацией Алгоритм вставки элемента
- •Алгоритм удаления элемента
- •Алгоритм поиска элемента
Итеративный алгоритм поразрядной lsd-сортировки
LSD_Sort (A, n, C)
-
А – массив
-
С – вспомогательный массив для карманов
-
R – основание системы счисления для поразрядной сортировки
-
k – максимальное количество цифр в значениях
-
d – номер текущей цифры
-
k bitsword / bitsdigit bitsword – число битов в ячейке массива А
-
bitsdigit – число битов в цифре
-
for d k down 0
-
do
-
вычисление размеров карманов
-
for j 1 to R+1
-
do count[j] 0
-
for i 1 to n
-
do j digit(A[i], d, R) digit(…) – извлечение d – й цифры
-
count[j+1] count[j+1] + 1
-
for j 2 to R
-
do count[j] count[j] + count[j-1]
-
распределение значений по карманам
-
for j 1 to n
-
do j digit(A[i], d, R)
-
C[count[j]] A[i]
-
count[j] count[j] + 1
-
перенос значений из карманов в массив A
-
for i 1 to n
-
do A[i] C[i]
Приложение В
Алгоритмы операций для BST – дерева
Алгоритм обхода BST – дерева по схеме t→Lt→Rt
t_Lt_ Rt (t)
1t-корень дерева
2S-вспомогательный стек
3 Push(S, t)
4 while Empty(S) = FALSE
5 do t ← Pop(S)
6 доступ к узлу t
7 if right[t] ≠ nil
8 then Push(S, right[t])
9 if left[t] ≠ nil
10 then Push(S, left[t])
Алгоритм обхода BST – дерева по схеме Lt→Rt→t
Lt_ Rt _t(t)
1t-корень дерева/поддерева
2 if t = nil then return
3 Lt_ Rt _t (left[t])
4 Lt_ Rt _t (right[t])
5 доступ к узлу t
Алгоритм обхода BST – дерева по схеме Lt→t→Rt
Lt_t_ Rt (t)
1t-корень дерева/поддерева
2 if t = nil then return
3 Lt_t_ Rt (left[t])
4 доступ к узлу t
5 Lt_t_ Rt (right[t])
Алгоритм обхода BST – дерева по схеме по уровням
Traverse (t)
1t-корень дерева
2Q-вспомогательная очередь
3 Enqueue(Q, t)
4 while Empty(Q) = FALSE
5 do t ← Dequeue(Q)
6 доступ к узлу t
7 if left[t] ≠ nil
8 then Enqueue (Q, left[t])
9 if right[t] ≠ nil
10 then Enqueue (Q, right[t])
Рекурсивный алгоритм поиска элемента в BST – дереве
BST_Search(t, k)
1 t – корень дерева или поддерева
2 k – значение искомого ключа
3 if t = nil
4 then сообщение об ошибке
5 if k = key[t]
6 then return data[t]
7 if k < key[t]
8 then return BST_Search(left[t], k)
9 else return BST_Search(right[t], k)
Итеративный алгоритм поиска элемента в BST – дереве
BST_Iterative_Search(t, k)
1 t – корень дерева
2 k – значение искомого ключа
3 while t ≠ nil and k ≠ key[t]
4 do if k < key[t]
5 then t ← left[t]
6 else t ← right[t]
7 if t = nil
8 then сообщение об ошибке
9 return data[t]
Рекурсивный алгоритм вставки элемента в BST – дерево
BST_Insert(t, k, data, inserted)
1 t – корень дерева или поддерева
2 k –ключ элемента
3 data – данные элемента
4 inserted – возвращаемый признак вставки
4 if k = key[t]
5 then inserted ← FALSE
6 return t
7 if t = nil
8 then inserted ← TRUE
9 return Create_Node(k, data)
10 if k < key[t]
11 then left[t] ← BST_Insert(left[t], k, data, ins)
12 else right[t] ← BST_Insert(right[t], k, data, ins)
13 inserted ← ins
14 return t