Алгоритмы сортировки массивов. Внешняя сортировка
Лабораторная работа 43. Алгоритмы сортировки массивов. Внешняя сортировка
Цель работы: изучить основные алгоритмы внешних сортировок, научиться решать задачи сортировок массивов различными методами и выполнять оценку эффективности алгоритмов внешней сортировки.
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе числовые данные, выполняет генерацию и вывод массива указанного типа в зависимости от постановки задачи. В каждой задаче необходимо выполнить сортировку данных и реализовать один из алгоритмов внешних сортировок в виде отдельных функций. Ввод данных осуществляется из файла с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные являются максимальный размер строковых данных, диапазон используемого числового типа данных в языке С++.
Теоретические сведения.
Ознакомьтесь с материалом лекции 43.
Задания к лабораторной работе.
Выполните приведенные ниже задания.
- На основании приведенной в лекции 43 функции реализуйте программу, в которой выполняется алгоритм внешней сортировки двухпутевым двухфазным простым слиянием.
- На основании приведенной в лекции функции реализуйте программу, в которой выполняется алгоритм внешней сортировки двухпутевым двухфазным естественным слиянием.
- Дан полный перечень всех стран, который включает в себя: название, континент, столицу, площадь, численность населения. Указать сведения о государствах заданного континента в порядке возрастания численности населения. Использовать двухпутевое однофазное простое слияние.
- Даны сведения о химических веществах, которые включает в себя: класс вещества, название вещества, молекулярная масса вещества. Упорядочить по возрастанию молекулярных масс все вещества указанного класса. Использовать двухпутевое двухфазное естественное сбалансированное слияние.
- В файле хранится последовательность русских слов. Упорядочить ее в алфавитном порядке. Использовать внешнюю сортировку. Учесть, что порядок кодов букв русского алфавита не соответствует порядку букв в алфавите.
Указания к выполнению работы.
Каждое задание необходимо решить в соответствии с изученными алгоритмами внешних сортировок. Программные коды следует реализовать на языке С++. Рекомендуется воспользоваться материалами лекции 43, где подробно рассматриваются описание используемых в работе алгоритмов, примеры их реализации на языке С++. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, используя функции. Этапы решения сопроводить комментариями в коде. В отчете следует отразить разработку и обоснование математической модели решения задачи и примеры входных и выходных файлов.
Следует реализовать каждое задание в соответствии с приведенными этапами:
- изучить словесную постановку задачи, выделив при этом все виды данных;
- сформулировать математическую постановку задачи;
- выбрать метод решения задачи, если это необходимо;
- разработать графическую схему алгоритма;
- записать разработанный алгоритм на языке С++;
- разработать контрольный тест к программе;
- отладить программу;
- представить отчет по работе.
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
- Титульный лист.
- Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
- Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
- Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
- Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
- Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
- Выводы по лабораторной работе.
- Ответы на контрольные вопросы.
Контрольные вопросы
- Чем обусловлено использование алгоритмов внешних сортировок?
- Как расходуется ОЗУ при использовании различных алгоритмов внешних сортировок?
- Каким слиянием, простым или естественным, эффективнее объединять два упорядоченных по общему ключу файла? Ответ обоснуйте.
- Какие еще факторы, кроме числа фаз и путей, следует учитывать при анализе эффективности алгоритмов внешних сортировок?
- Как определить, какому алгоритму внешних сортировок отдать предпочтение при решении задачи?