
- •Оглавление
- •Введение
- •Лабораторная работа №1. Реализация алгоритмов сортировки и поиска Задачи работы
- •Задание на лабораторную работу
- •Сортировка Шелла
- •Сортировка шейкером
- •Сортировка расческой (Comb sort)
- •Плавная сортировка (Smooth sort)
- •Метод Patience sorting
- •Лабораторная работа №2. Понятие контейнера данных. Основные типы контейнеров Задачи работы
- •Задание на лабораторную работу
- •Требования к отчетности по лабораторной работе
- •Предлагаемые этапы выполнения работы
- •Теоретический материал, необходимый для выполнения лабораторной работы Основные типы контейнеров Списки
- •Бинарные деревья поиска
- •Добавление элемента
- •Удаление элемента
- •Понятие сбалансированности дерева
- •Словари
- •Очереди с приоритетами
- •Очереди
- •Лабораторная работа №3. Использование стандартных контейнеров данных Задачи работы
- •Задание на лабораторную работу
- •Лабораторная работа №4. Использование стандартных реализаций алгоритмов stl Задачи работы
- •Задание на лабораторную работу
- •Кафедра компьютерной фотоники
Лабораторная работа №1. Реализация алгоритмов сортировки и поиска Задачи работы
Задачами данной лабораторной работы являются:
Закрепление навыков программирования на языке C++, в частности, навыков работы с массивами, указателями и функциями.
Контроль освоения студентами теоретического материала – информации об алгоритмах сортировки и поиска.
Задание на лабораторную работу
Разработать программу на языке C++, реализующую алгоритм сортировки или поиска в соответствии с индивидуальным вариантом задания.
Варианты задания:
Реализовать сортировку Шелла (описана ниже).
Реализовать сортировку шейкером (описана ниже).
Реализовать сортировку подсчетом для массива данных типа char [5, стр. 224].
Реализовать цифровую сортировку для типа int (32-разрядных целых чисел). Сортировать по двоичной записи числа [5, стр. 226].
Реализовать цифровую сортировку для типа int (32-разрядных целых чисел). Сортировать по десятичной записи числа [5, стр. 226].
Реализовать цифровую сортировку для типа int (32-разрядных целых чисел). Сортировать по восьмеричной записи числа [5, стр. 226].
Реализовать цифровую сортировку для типа int (32-разрядных целых чисел). Сортировать по шестнадцатеричной записи числа [5, стр. 226].
Реализовать пирамидальную сортировку (HeapSort) [5, стр. 178].
Реализовать сортировку расческой (CombSort).
Реализовать плавную сортировку (Smooth Sort).
Реализовать быструю сортировку (QuickSort) [5, стр. 198].
Реализовать рандомизированную быструю сортировку (QuickSort) [5, стр. 208].
Реализовать блочную (карманную, bucket) сортировку [5, стр. 230].
Реализовать метод Patience sorting.
Реализовать метод IntroSort.
Реализовать бинарный поиск в массиве [1, разд. 2.1].
Реализовать поиск i-ой порядковой статистики ([5, стр. 243])
Реализовать строгий поиск i-ой порядковой статистики ([5, стр. 247]).
Решить методом динамического программирования задачу поиска оптимального пути на конвейере [5, разд. 15.1]
Решить методом динамического программирования задачу поиска самой длинной подпоследовательности [5, разд. 15.4]
Решить методом динамического программирования задачу поиска лучшего варианта перемножения матриц [5, разд. 15.2]
Реализовать гномью сортировку.
Реализовать вариант алгоритма Merge Sort без использования дополнительной памяти http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.22.8523
Реализовать метод сортировки SpreadSort (http://en.wikipedia.org/wiki/Spreadsort)
Реализовать метод сортировки Gapped insertion sort (Library Sort) http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.60.3758
Программа должна позволять ввести исходные данные из файла. Программа должна выводить результат в файл.
Достаточна разработка консольного приложения. Разработка Windows-приложения будет большим преимуществом выполнения работы, если студент достаточно подготовлен для создания Windows-приложений, иллюстрирующих работу системы.
Требования к отчетности по лабораторной работе
В качестве отчета по лабораторной работе студент предоставляет в электронном виде программу на языке C++, реализующую функциональность в соответствии с вариантом задания.
Предлагаемые этапы выполнения работы
Изучение теоретического материала.
Создание пустого консольного приложения в среде Visual Studio 2005 [3].
Разработка функций ввода-вывода данных
Отладка функций ввода-вывода данных.
Разработка функции сортировки или поиска в соответствии с заданием.
Отладка программы.
Теоретический материал, необходимый для выполнения лабораторной работы
Алгоритмы сортировки
В этом разделе описана часть алгоритмов сортировки. Алгоритмы, подробно описанные в [5], не дублируются.
Сортировка вставками
Сортировку вставками необходимо рассмотреть, чтобы перейти затем к сортировке Шелла.
Алгоритм сортировки вставками сводится к следующему. Если первые N элементов (A[0]…A[N-1]) отсортированы, мы можем вставить N-ый элемент в отсортированную последовательность с помощью кода:
t = A[ N ];
for ( i = N - 1; i >= 0 && A[i] > t ; i-- )
A[ i + 1 ] = A[ i ];
A[ i + 1 ] = t;
После этого будут отсортированы уже N+1 элементов.
Использование бинарного поиска места для нового элемента было бы бессмысленно, т.к. время сдвига оставшихся элементов на одну позицию направо все равно линейно.
Последовательность из одного элемента отсортирована всегда. Значит, мы можем сортировать массив путем последовательных вставок.
Этот алгоритм работает за время O(N2). К его преимуществам относится хорошая работа в случае почти отсортированных массивов (мы мгновенно обнаруживаем, что нам не надо двигать тот или иной элемент) и сохранение порядка элементов при сортировке.