- •Структуры и алгоритмы
- •ВвЕдение
- •Необходимые понятия и определения
- •Основные структуры данных
- •Задача сортировки массивов
- •Трудоемкость методов сортировки массивов
- •Задача сортировки последовательностей
- •Теорема о сложности сортировки
- •Задача поиска элементов с заданным ключом
- •Контрольные вопросы
- •Методы сортировки с квадратичной трудоемкостью
- •Метод прямого выбора
- •Алгоритм на псевдокоде
- •Пузырьковая сортировка
- •Алгоритм на псевдокоде
- •Шейкерная сортировка
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Метод Шелла
- •Метод прямого включения
- •Алгоритм на псевдокоде
- •Метод Шелла
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Быстрые методы сортировки массивов
- •Пирамидальная сортировка
- •Свойства пирамиды
- •Алгоритм на псевдокоде
- •Построение (1, 8)-пирамиды
- •Сортировка
- •Алгоритм на псевдокоде
- •Метод Хоара
- •Алгоритм на псевдокоде
- •Проблема глубины рекурсии.
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Работа с линейными списками
- •Указатели. Основные операции с указателями
- •Основные операции с линейными списками
- •Методы сортировки последовательностей
- •Метод прямого слияния
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Цифровая сортировка
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Двоичный поиск в упорядоченном массиве
- •Алгоритм двоичного поиска
- •Алгоритм на псевдокоде
- •Обозначим
- •Найден – логическая переменная, в которой будем отмечать факт успешного завершения поиска.
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Сортировка данных с произвольной структурой
- •Сравнение данных произвольной структуры
- •Сортировка по множеству ключей. Индексация
- •Алгоритм на псевдокоде (на примере пузырьковой сортировки)
- •Индексация через массив указателей
- •Контрольные вопросы
- •Хэширование и поиск
- •Понятие хэш-функции
- •Алгоритм на псевдокоде
- •Метод прямого связывания
- •Метод открытой адресации
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Правила выполнения лабораторных работ
- •Лабораторная работа 1
- •Лабораторная работа 2
- •Лабораторная работа 3
- •Лабораторная работа 4
- •Лабораторная работа 5
- •Лабораторная работа 6
- •Контрольная работа правила выполнения и оформления Контрольной работы
- •Правила выбора варианта Задания для контрольной работы одинаковы для всех студентов. Начальные данные выбираются индивидуально в зависимости от задания в контрольной работе.
- •Вопросы к зачету правила выставления зачета
- •Рекомендуемая литература
- •Псевдокод для записи алгоритмов
Лабораторная работа 2
Тема: Быстрые методы сортировки массивов
Цель работы: Освоить быстрые методы сортировки массивов
Порядок выполнения работы:
Разработать процедуры сортировки массива целых чисел методом Шелла, методом пирамидальной сортировки и методом Хоара (язык программирования Паскаль или Си).
Правильность сортировки проверить путем подсчета контрольной суммы и числа серий в массиве.
Во время сортировки предусмотреть подсчет количества пересылок и сравнений (М и С), сравнить их с теоретическими оценками.
Составить таблицу следующего вида (данные получить экспериментально) для n= 10, 50, 100, 200. (n– количество элементов в массиве)
-
метод
М для упорядоченного массива
С для упорядоченного массива
М для случайного массива
С для случайного массива
Метод Шелла
Пирамидальная
сортировка
Метод Хоара
Проанализировать полученные результаты. (Какой из методов самый быстрый? Самый медленный? Как сложность зависит от начальной отсортированности?)
Сравните трудоемкости методов быстрой сортировки и трудоемкости методов с квадратичной трудоемкости (использовать результаты лабораторной работы 1)
Лабораторная работа 3
Тема: Работа с линейными списками
Цель работы: Освоить основные операции с линейными сприсками
Порядок выполнения работы:
Разработать процедуры для работы со списками (язык программирования Паскаль или Си):
- заполнение стека и очереди возрастающими числами;
- заполнение стека и очереди убывающими числами;
- заполнение стека и очереди случайными числами;
- печать элементов списка;
- подсчет контрольной суммы элементов списка;
- подсчет количества серий в списке.
Применить разработанные процедуры для n= 20 (n– количество элементов в списке).
Проанализировать полученные результаты. (Какой порядок элементов в стеке? В очереди? Зависит ли количество серий от вида списка?)
Лабораторная работа 4
Тема: Быстрые методы сортировки последовательностей
Цель работы: Освоить быстрые методы сортировки последовательностей
Порядок выполнения работы:
Разработать процедуры сортировки последовательности целых чисел методом прямого слияния и методом цифровой сортировки (язык программирования Паскаль или Си).
Во время сортировки предусмотреть подсчет количества пересылок элементов в очередь и сравнений (М и С), сравнить их с теоретическими оценками.
Составить таблицу следующего вида (данные получить экспериментально) для n= 10, 50, 100, 200. (n– количество элементов в массиве)
-
метод
М для упорядоченной последовательности
С для упорядоченной последовательности
М для
случайной последовательности
С для
случайной
последовательности
Прямое слияние
цифорвая
Проанализировать полученные результаты. (Какой из методов самый быстрый? Самый медленный? Как сложность зависит от начальной отсортированности?)