Алгоритмы сортировки: методы внутренней и внешней сортировки, анализ сложности и эффективности алгоритмов сортировки.
Пусть есть последовательность a0, a1... an и функция сравнения, которая на любых двух элементах последовательности принимает одно из трех значений: меньше, больше или равно. Задача сортировки состоит в перестановке членов последовательности таким образом, чтобы выполнялось условие: ai <= ai+1, для всех i от 0 до n.
Возможна ситуация, когда элементы состоят из нескольких полей:
Если значение функции сравнения зависит только от поля x, то x называют ключом, по которому производится сортировка. На практике, в качестве x часто выступает число, а поле y хранит какие-либо данные, никак не влияющие на работу алгоритма.
Для того, чтобы обоснованно сделать выбор, рассмотрим параметры, по которым будет производиться оценка алгоритмов.
Время сортировки - основной параметр, характеризующий быстродействие алгоритма.
Память - ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. При оценке используемой памяти не будет учитываться место, которое занимает исходный массив и независящие от входной последовательности затраты, например, на хранение кода программы.
Устойчивость - устойчивая сортировка не меняет взаимного расположения равных элементов. Такое свойство может быть очень полезным, если они состоят из нескольких полей, а сортировка происходит по одному из них, например, по x.
Естественность поведения - эффективность метода при обработке уже отсортированных, или частично отсортированных данных. Алгоритм ведет себя естественно, если учитывает эту характеристику входной последовательности и работает лучше.
Еще одним важным свойством алгоритма является его сфера применения. Здесь основных позиций две:
внутренние сортировки работают с данным в оперативной памяти с произвольным доступом;
внешние сортировки упорядочивают информацию, расположенную на внешних носителях. Это накладывает некоторые дополнительные ограничения на алгоритм:
доступ к носителю осуществляется последовательным образом: в каждый момент времени можно считать или записать только элемент, следующий за текущим
объем данных не позволяет им разместиться в ОЗУ
Кроме того, доступ к данным на носителе производится намного медленнее, чем операции с оперативной памятью.
Данный класс алгоритмов делится на два основных подкласса:
Внутренняя сортировка оперирует с массивами, целиком помещающимися в оперативной памяти с произвольным доступом к любой ячейке. Данные обычно сортируются на том же месте, без дополнительных затрат.
Внешняя сортировка оперирует с запоминающими устройствами большого объема, но с доступом не произвольным, а последовательным (сортировка файлов), т.е в данный момент мы 'видим' только один элемент, а затраты на перемотку по сравнению с памятью неоправданно велики . Это приводит к специальным методам сортировки, обычно использующим дополнительное дисковое пространство.
Сортировка выбором Идея метода состоит в том, чтобы создавать отсортированную последовательность путем присоединения к ней одного элемента за другим в правильном порядке.
Будем строить готовую последовательность, начиная с левого конца массива. Алгоритм состоит из n последовательных шагов, начиная от нулевого и заканчивая (n-1)-м. Для нахождения наименьшего элемента из n+1 рассматримаемых алгоритм совершает n сравнений. С учетом того, что количество рассматриваемых на очередном шаге элементов уменьшается на единицу. Алгоритм не использует дополнительной памяти: все операции происходят "на месте".
Сортировка пузырьком Идея метода: шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами. После нулевого прохода по массиву "вверху" оказывается самый "легкий" элемент - отсюда аналогия с пузырьком. Следующий проход делается до второго сверху элемента, таким образом второй по величине элемент поднимается на правильную позицию...
Сортировка вставками Будем разбирать алгоритм, рассматривая его действия на i-м шаге. Как говорилось выше, последовательность к этому моменту разделена на две части: готовую a[0]...a[i] и неупорядоченную a[i+1]...a[n].
На следующем, (i+1)-м каждом шаге алгоритма берем a[i+1] и вставляем на нужное место в готовую часть массива.
Поиск подходящего места для очередного элемента входной последовательности осуществляется путем последовательных сравнений с элементом, стоящим перед ним.
В зависимости от результата сравнения элемент либо остается на текущем месте(вставка завершена), либо они меняются местами и процесс повторяется.
Сортировка Шелла Рассмотрим следующий алгоритм сортировки массива a[0].. a[15]. Вначале сортируем простыми вставками каждые 8 групп из 2-х элементов (a[0], a[8[), (a[1], a[9]), ... , (a[7], a[15]). Потом сортируем каждую из четырех групп по 4 элемента (a[0], a[4], a[8], a[12]), ..., (a[3], a[7], a[11], a[15]). В нулевой группе будут элементы 4, 12, 13, 18, в первой - 3, 5, 8, 9 и т.п. Далее сортируем 2 группы по 8 элементов, начиная с (a[0], a[2], a[4], a[6], a[8], a[10], a[12], a[14]).
Быстрая сортировка Метод основан на подходе "разделяй-и-властвуй". Общая схема такова:
1. из массива выбирается некоторый опорный элемент a[i],
2. запускается процедура разделения массива, которая перемещает все ключи, меньшие, либо равные a[i], влево от него, а все ключи, большие, либо равные a[i] - вправо,
3. теперь массив состоит из двух подмножеств, причем левое меньше, либо равно правого
4. для обоих подмассивов: если в подмассиве более двух элементов, рекурсивно запускаем для него ту же процедуру.
В конце получится полностью отсортированная последовательность.
Поразрядная сортировка Во-первых, он совсем не использует сравнений сортируемых элементов.
Во-вторых, ключ, по которому происходит сортировка, необходимо разделить на части, разряды ключа. Например, слово можно разделить по буквам, число - по цифрам...
До сортировки необходимо знать два параметра: k и m, где
* k - количество разрядов в самом длинном ключе
* m - разрядность данных: количество возможных значений разряда ключа
При сортировке русских слов m = 33, так как буква может принимать не более 33 значений. Если в самом длинном слове 10 букв, k = 10.
Аналогично, для для шестнадцатиричных чисел m=16, если в качестве разряда брать цифру, и m=256, если использовать побайтовое деление.
Эти параметры нельзя изменять в процессе работы алгоритма. В этом - еще одно отличие метода от вышеописанных.
- Программа государственного экзамена
- Пояснительная записка
- Основные задачи государственного экзамена
- Содержание государственного экзамена
- Структура экзаменационного билета
- Требования к ответу на вопросы экзаменационного билета
- Критерии оценки ответа
- Программа
- I. Общепрофессиональные дисциплины
- Раздел 1. Программирование на языке высокого уровня
- Динамический тип данных, линейные динамические структуры данных: стек, очередь, списки; нелинейные динамические структуры данных: мультисписки, деревья.
- Процедуры и функции: описание, вызов, передача параметров, программирование рекурсивных алгоритмов.
- Раздел 2. Компьютерная графика
- Раздел 3. Организация эвм и систем
- Архитектура эвм, периферийные устройства, организация ввода-вывода информации.
- Системы эвм: вычислительные системы и сети, сопроцессоры, мультипроцессорные вычислительные системы, матричные и конвейерные вычислительные системы, связные устройства, модемы, протоколы обмена.
- Раздел 4. Операционные системы
- Виртуальная память: страничная, сегментная, сегментно-страничная организация памяти, коллективное использование и защита информации; файлы, отображаемые в память.
- Файловая система ос: состав, управление, типы файловых систем; логическая и физическая организация файла, методы доступа, операции над файлами, отображаемые файлы.
- Раздел 5. Базы данных
- Управление транзакциями, сериализация транзакций (синхронизационные захваты, метод временных меток), изолированность пользователей.
- Архитектура "клиент-сервер": открытые системы, клиенты и серверы локальных сетей, системная архитектура "клиент-сервер", серверы баз данных.
- Распределенные бд: разновидности распределенных систем, распределенная субд System r, интегрированные или федеративные системы и мультибазы данных.
- Раздел 6. Сети эвм и телекоммуникации
- Передача дискретных данных: линии связи, методы передачи дискретных данных на физическом уровне, методы передачи данных канального уровня, методы коммутации.
- Средства анализа и управления сетями: функции и архитектура систем управления сетями, стандарты систем управления, мониторинг и анализ локальных сетей.
- Раздел 7. Методы и средства защиты компьютерной информации
- Безопасность компьютерных сетей: протоколы сетевой безопасности, программно-аппаратные комплексы защиты сетей.
- Безопасность современных ос и программных комплексов, вредоносные программы, системы обнаружения вторжений, комплексный подход к проектированию и анализу защищенных ис.
- Раздел 8. Системное программирование
- Организация ячеек памяти, регистры, форматы команд.
- Ассемблер: основные понятия, директивы, команды. Условный и безусловный переходы. Циклы. Массивы. Процедуры. Упакованные данные. Структуры.
- Защищенный режим процессора Intel 80386: страничная адресация, переключение контекста, использование возможностей защищенного режима различными ос.
- Раздел 9. Структуры и алгоритмы обработки данных
- Абстрактный тип данных. Линейные и нелинейные структуры данных. Стек, очередь, списки, деревья, графы.
- Алгоритмы сортировки: методы внутренней и внешней сортировки, анализ сложности и эффективности алгоритмов сортировки.
- Алгоритмы поиска: последовательный, бинарный, интерполяционный поиск, использование деревьев в задачах поиска; хеширование с открытой и закрытой адресацией; алгоритмы поиска подстроки в строке.
- Раздел 10. Функциональное и логическое программирование
- Принципы функционального программирования: программирование при помощи функций, функциональность, основные свойства функциональных языков, язык программирования Лисп, рекурсия.
- Функционалы: функциональное значение функции, способы композиции функций, функции более высокого порядка.
- Раздел 11. Объектно-ориентированное программирование
- Параметрический полиморфизм: шаблонные классы и шаблонные функции - назначение, параметризованные типы данных, синтаксис и семантика.
- Раздел 12. Теория вычислительных процессов
- Элементы теории вычислимости: вычислимость и разрешимость, интуитивное и точное понятие алгоритма, вычислимые функции, машина Тьюринга, массовые алгоритмические проблемы.
- Раздел 13. Теория языков программирования и методы трансляции
- Раздел 14. Архитектура вычислительных систем
- Раздел 15. Технология разработки программного обеспечения
- 1 Область применения
- Структуры данных: несвязанные, с неявными связями, с явными связями; иерархические модели Джексона-Орра; моделирование данных – диаграммы «сущность-связь» (erd); метод Баркера; метод idef1.
- Разработка структуры по при объектом подхода
- Раздел 16. Человеко-машинное взаимодействие
- Типы пользовательских интерфейсов и этапы их разработки, психофизические особенности человека, связанные с восприятием, запоминанием и обработкой информации.
- Раздел 17. Системы искусственного интеллекта
- Системы распознавания образов (идентификации): обучение распознаванию образов, геометрический и структурный подходы, гипотеза компактности, адаптация и обучение.
- Эволюционные методы поиска решений: метод группового учета аргументов, генетический алгоритм.
- Экспертные системы: классификация и структура; инструментальные средства проектирования, разработки и отладки; этапы разработки; примеры реализации.
- Раздел 18. Проектирование информационных систем
- Архитектуры реализации корпоративных информационных систем на платформах Sun, Microsoft, Linux.
- Раздел 19. Сетевые операционные системы
- Основные концепции ос семейства Windows nt: особенности установки, конфигурирования, администрирования, оптимизации производительности.
- Администрирование удаленного доступа к сетям Windows, взаимодействие с сетями tcp/ip, взаимодействие с сетями NetWare, средства просмотра сетевых ресурсов.
- Основные концепции ос unix/Linux, средства графического интерфейса пользователей, основные механизмы и компоненты ядра, программирование в среде unix /Linux.
- Основные концепции ос NetWare, проектирование Novell Directory Services, поддержка ос NetWare.
- Администрирование ос NetWare, дополнительные средства ос NetWare: средства защиты nds для nt, встроенные утилиты администрирования сети.
- Раздел 20. Комплексные программные платформы
- Системы планирования ресурсов предприятия (erp). Основные понятия, принципы, подсистемы.
- Методология внедрения erp-систем.
- Раздел 21. Программное обеспечение распределенных систем и сетей
- Раздел 22. Разработка корпоративного web-узла
- Перечень литературы
- Перечень основных стандартов в области обеспечения жизненного цикла и качества программных средств