- •Введение
- •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 - дерева
- •Приложение д Алгоритмы операций для хеш-таблицы с открытой адресацией Алгоритм вставки элемента
- •Алгоритм удаления элемента
- •Алгоритм поиска элемента
3.2. Задание к лабораторной работе
-
Спроектировать, реализовать и провести тестовые испытания АТД «Список» для коллекции, содержащей данные произвольного типа. Тип данных задаётся клиентской программой.
АТД «Список» представляет позиционно–ориентированную, линейную последовательность с доступом к элементам по номеру позиции или по значению.
Интерфейс АТД "Список" включает следующие операции:
-
опрос размера списка,
-
очистка списка,
-
проверка списка на пустоту,
-
опрос наличия заданного значения,
-
чтение значения с заданным номером в списке,
-
изменение значения с заданным номером в списке,
-
получение позиции в списке для заданного значения,
-
включение нового значения,
-
включение нового значения в позицию с заданным номером,
-
удаление заданного значения из списка,
-
удаление значения из позиции с заданным номером,
-
итератор для доступа к значениям в списке с основными операциями:
-
установка на первое значение в списке,
-
переход к следующему значению в списке,
-
переход к предыдущему значению (для списка на базе массива или двусвязной структуры),
-
проверка состояния итератора,
-
доступ по чтению и записи к текущему значению.
Для тестирования эффективности операций интерфейс АТД "Список" включает дополнительную операцию
-
опрос числа элементов списка, просмотренных операцией.
-
Выполнить отладку и тестирование всех операций АТД "Список" и итератора с помощью меню операций.
-
Выполнить тестирование средней трудоёмкости операций поиска значения в списке, вставки значения в указанную позицию, удаления значения из указанной позиции.
-
Составить отчёт по лабораторной работе. Отчёт должен содержать следующие пункты:
-
пункты 1 – 5 отчёта (см. раздел 2.2),
-
описание методики тестирования трудоёмкости операций списка,
-
таблицы и графики с полученными оценками трудоёмкости операций. Должны быть приведены графики среднего числа просмотренных узлов списка для операций поиска, вставки и удаления (графики совмещены в одной системе координат),
-
сравнительный анализ теоретических и экспериментальных оценок трудоёмкости для операций списка,
-
сравнительный анализ экспериментальных оценок трудоёмкости для различных операций списка,
-
пункты 10 – 12 отчёта (см. раздел 2.2).
3.2.1. Варианты заданий:
-
Структура данных – массив заданного размера.
-
Структура данных - надежный массив.
-
Структура данных – односвязная, на базе массива с индексными указателями.
-
Структура данных – двусвязная, на базе массива с индексными указателями.
-
Структура данных - двусвязная, на базе адресных указателей.
-
Структура данных - кольцевая, односвязная, на базе адресных указателей.
-
Структура данных – кольцевая, двусвязная, на базе адресных указателей.
-
Структура данных - кольцевая, односвязная, на базе адресных указателей, с использованием фиктивного элемента.
3.2.2. Методические указания к выполнению задания
-
Создание коллекции «Список» выполняется в соответствии с технологией реализации коллекций, изложенной в разделе 1. Для АТД «Список» разрабатываются формат АТД и шаблонный класс – контейнер. Параметр шаблона задаёт тип объектов, хранящихся в списке. Для элементов списка и итератора разрабатываются вспомогательные внутренние классы, определённые в классе списка.
-
Операции над списком учитывают специфику структуры, хранящей список. Операции для двусвязных списков выбирают проход по списку в прямом или обратном направлении с целью минимизации числа просматриваемых узлов.
-
Итератор списка учитывает специфику структуры, хранящей список. Итератор может быть односторонним, или двусторонним. Набор основных операций двустороннего итератора должен быть дополнен операциями для работы с концом списка и обратного прохода по списку от конца списка.
-
Для тестирования разработанного класса – контейнера разрабатываются две программы: программа тестирования операций через меню, и программа тестирования трудоёмкости операций опроса, вставки и удаления.
-
Тестирование операций через меню выполняется для списка небольшого размера (до 10 элементов). Тестирующая программа выполняет вызов метода коллекции для выбранной операции без предварительной проверки входных параметров и состояния коллекции. После выполнения каждой операции необходимо вывести на экран содержимое списка. При выводе списка необходимо отражать только значения, хранящиеся в списке.
-
Тестирование трудоёмкости операций поиска, вставки и удаления выполняется в соответствии с технологией тестирования, изложенной в разделе 1.4.
-
Перед тестированием тудоёмкости операций задаётся размер списка. Размер списка варьируется в пределах от 10 до 100 000 элементов. После тестирования на экран выводятся размер списка и средняя трудоёмкость операций поиска, вставки и удаления (среднее число просмотренных элементов списка).