- •Введение
- •Глава 1. Организация и технология разработки прикладных программ Математическое обеспечение и его структура
- •Организация разработки прикладных программ
- •Технология разработки прикладных программ
- •Характеристики качества программного обеспечения
- •Структура курса и литература
- •Глава 2. Типы структурированных данных. Статические и динамические типы данных. Файловая структура
- •Типы данных
- •Представление структур в памяти эвм
- •Некоторые примеры представления данных
- •Техника доступа к информации записанной в файле
- •Глава 3. Основные этапы полного построения алгоритма
- •Глава 4. Некоторые основные приемы и алгоритмы
- •4.1 Структурное программирование сверху-вниз и правильность программ
- •4.2 Основные правила структурного программирования
- •4.3. Структурное программирование сверху-вниз: дополнительные соображения
- •4.4.Практические советы при использовании метода структурного программирования
- •1.4. Общая организация программы и ее запись
- •1.4. "Малый программистский стандарт"
- •5. Методы разработки алгоритма
- •5.1. Методы частных целей, подъема и отрабатывания назад
- •5.2 Метод эвристики
- •5.3 Программирование с отходом назад
- •5.4. Метод ветвей и границ
- •5.5. Рекурсия
- •5.6. Моделирование
- •Глава 6. Алгоритмы машинной математики больших массивов данных.
- •6.1. Сортировка
- •6.2. Сортировка массивов
- •6.3. Сортировка последовательностей.
- •6.4. Поиск
- •7. Документирование, сопровождение и эксплуатация программ.
- •7.1.Стандартизация, дисциплина и творчество в программировании.
- •7.2. Виды программ и программных документов
- •7.3. Основные стадии и этапы разработки программ и программной документации
Глава 6. Алгоритмы машинной математики больших массивов данных.
В предыдущих разделах нами были рассмотрены основные принципы разработки алгоритма решения задачи. В настоящем разделе нами будут рассмотрены методы машинной математики для обработки больших данных. Как известно, с данными необходимо проводить такие операции многочисленные операции, но доминирующую роль играют такие операции, как сортировка и поиск. Рассмотрим их наиболее подробно.
6.1. Сортировка
Сортировку следует понимать как процесс перегруппировки заданного множества объектов в некотором определенном порядке. Цель сортировки - облегчить последующий поиск элементов в таком отсортированном множестве. Эта почти универсальная, фундаментальная деятельность. Мы встречаемся с отсортированными данными везде: в оглавлениях книг, в словарях, библиотеках и т.п. Даже "малышей" учат держать свои вещи "в порядке", и они уже сталкиваются с азами сортировки.
Сортировка стала важным предметом вычислительной математики в основном потому, что она отнимает значительную часть времени работы ЭВМ. Осознание того, что 25% всего времени вычислений расходуется на сортировку данных, придает особое значение эффективным алгоритмам сортировки.
К сожалению, нет алгоритма сортировки, который был бы наилучшим в любом случае. Трудно даже решить, какой алгоритм будет лучшим в данной ситуации, так как эффективность алгоритма сортировки может зависеть от множества факторов, например от того, (1) каково число сортируемых элементов; (2) все ли элементы могут быть помещены в доступную оперативную память; (3) до какой степени элементы уже отсортированы; (4) каковы диапазон и распределение значений сортируемых элементов; (5) записаны ли элементы на диске или магнитной ленте; (6) каковы длина, сложность и требования к памяти алгоритма сортировки; (7) предполагается ли, что элементы будут периодически исключаться или добавляться; (8) можно ли элементы сравнивать параллельно.
Очевидно, что с отсортированными данными работать легче, чем с произвольно расположенными. Когда элементы отсортированы, их проще найти (как в телефонном справочнике), обновить, исключить, включить и слить воедино. На отсортированных данных легче определить, имеются ли пропущенные элементы (как в колоде игральных карт), и удостовериться, что все элементы были проверены. Легче также найти общие элементы двух множеств, если они оба отсортированы. Сортировка применяется при трансляции программ, когда составляются таблицы символов; она также является важным средством для ускорения работы практически любого алгоритма, в котором часто нужно обращаться к определенным элементам.
Обычно сортируемые элементы представляют собой записи данных определенного вида. Каждая запись имеет поле ключа и поле информации. Поле ключа содержит положительное число, обычно целое, и записи упорядочиваются по значению ключа. Однако учитывая, что в данном разделе, важно понять сам метод сортировки, мы не будем делать существенного различия между ключом элемента массива, и самим элементом массива, считая в качестве элемента массива простое положительное число.
Выбор алгоритма зависит от структуры обрабатываемых данных - это почти закон, но в случае сортировки такая зависимость столь глубока, что соответствующие ей методы были разбиты на два класса - сортировку массивов и сортировку файлов (или последовательностей). Иногда их называют внутренней и внешней сортировкой, поскольку массивы хранятся в оперативной памяти со случайным доступом, а файла размещаются во внешней памяти. Уже на примере сортировке карточек становится очевидным существенное различие в этих подходах. Если карты "выстороены" в виде массива, то они как бы лежат на столе, и сортирующий видит их сразу все. Если карты образуют файл, то это предполагает, что видна только верхняя карта в каждой из стопок. Такое ограничение накладывает существенное отличие в методах сортировок.
В этом разделе мы рассматриваем два метода сортировки массивов: сортировка простыми включениями и так называемый метод быстрой сортировки. Кроме того рассмотрим принципы сортировки пузырьками и сортировка методом отыскания наименьшего (наибольшего) ключа.
Рассмотрение сортировок последовательностей изложено на основе метода в котором используется сортировка с помощью слияния.