Скачиваний:
31
Добавлен:
11.02.2016
Размер:
123.9 Кб
Скачать

Введение

Данные методические указания и задачи к практическим занятиям подготовлены в соответствии с программой курса Теория алгоритмов и вычислительных процессов, изучаемого студентами специальностей 7.080403 Программное обеспечение автоматизированных систем и 7.091501 Компьютерные и интеллектуальные системы и сети

Целью данных методических указаний и задач является закрепление лекционного материала и выработка у студентов навыков применения алгоритмов решения стандартных задач. К таковым относятся задачи сортировки, оптимального покрытия, а также задачи на графах; для этих задач приводятся словесные описания решающих алгоритмов. Кроме того, рассматриваются задачи преобразования дискретной информации конечными автоматами и машинами Тьюринга. Эти задачи получили широкое распространение в анализе и синтезе программных и аппаратных средств вычислительной техники, в дискретной математике, теории исследования операций и других разделах математики, а также имеют многочисленные технические приложения.

При построении эффективных алгоритмов важное значение придаётся выбору наиболее подходящих структур данных. В связи с этим в данных методических указаниях рассматриваются простейшие динамические структуры данных (списки и их специальные виды) и основные операции над ними.

Каждый раздел содержит краткие теоретические сведения, примеры и задания для самостоятельной работы студентов. Номер варианта задания определяется по формуле n = Nmodk +1, где N  номер студента в списке группы; k  величина модуля, равная числу вариантов данного раздела.

1. Алгоритмы сортировки

Цель практического занятия по данной теме – познакомиться с простейшими методами сортировки и с алгоритмами, реализующими эти методы; приобрести навыки использования алгоритмов сортировки и оценивания их сложности.

1.1. Общие положения

Под сортировкой понимают процесс перестановки объектов данного множества в определенном порядке. Цель сортировки – облегчить последующий поиск элементов в отсортированном множестве. Упорядоченные объекты содержатся в телефонных книгах, в библиотеках, в словарях на складах и т.д., т.е. всюду, где их нужно разыскивать.

Зависимость выбора алгоритмов от структуры данных явление довольно частое, и в случае сортировки она настолько сильна, что методы сортировки обычно разделяют на два класса: сортировкамассивови сортировка (последовательных)файлов. Часто их называютвнутреннейивнешнейсортировкой, так как массивы располагаются во «внутренней» (оперативной) памяти ЭВМ, а файлы хранятся в более медленной, но более вместительной «внешней» памяти (диски). Это существенное различие можно наглядно показать на примере сортировки пронумерованных карточек: представление карточек в виде массива соответствует тому, что все они располагаются перед сортирующим так, что каждая карточка видна и доступна; представление карточек в виде файла предполагает, что видна только верхняя карточка из каждой стопки. Ниже рассматривается только сортировка массивов.

Рассмотрим терминологию и обозначения, которые мы будем использовать в этом разделе. Нам даны элементы a1, a2, …, an.

Сортировка означает перестановку (в результате k шагов) этих элементов в таком порядкеak1, ak2, …, akn, что при заданной функции упорядоченияf справедливо отношениеf (ak1) ≤ f (ak2) ≤ … ≤ f (akn).

Обычно функция упорядочения не вычисляется по какому-то специальному правилу, а содержится в каждом элементе в виде явной компоненты (поля). Её значение называют ключом элемента. Ключ в алгоритмах сортировки – единственная существенная компонента.

В данном разделе разбираются некоторые избранные методы [1]; более полное представление о сортировке можно получить из блестящей и всеобъемлющей работы [2].

Эффективность алгоритма, реализующего тот или иной метод сортировки массивов, определяется двумя основными требованиями – экономичное использование памяти и быстродействие алгоритма. Первое требование означает, что переупорядочение элементов нужно выполнить на том же месте памяти; удобная мера быстродействия алгоритма получается при подсчёте числа С необходимых сравнений ключей, и М пересылок элементов. Эти числа определяются некоторыми функциями от числа N сортируемых элементов. Хотя хорошие алгоритмы требуют О(nlog2n) сравнений, мы сначала обсудим несколько простых и очевидных методов сортировки, которые требуют О(n2) сравнений ключей. Мы рассмотрим вначале простые методы по следующим причинам.

1. Простые методы особенно хорошо подходят для разъяснения свойств большинства принципов сортировки.

2. Программы, основанные на этих методах, легки для понимания и коротки. Следует помнить, что программы также занимают память!

3. Хотя сложные методы требуют меньшего числа операций, эти операции более сложны; поэтому при достаточно малых N простые методы работают быстрее, но их не следует использовать при больших N

Методы, сортирующие элементы на том же месте, можно разбить на 3 основных класса, в зависимости от лежащего в их основе принципа:

  • сортировка включениями;

  • сортировка выбором;

  • сортировка обменом.

Кроме того, рассматриваются некоторые улучшения первого (метод бинарных включений) и последнего (метод шейкер-сортировки) методов.

Соседние файлы в папке 1. Алгоритмы сортировки