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

Скачать презентацию на тему: "Алгоритмы сортировки" с количеством слайдов в размере 56 страниц. У нас вы найдете презентацию на любую тему и для каждого класса школьной программы. Мы уверены, что наши слайды помогут найти вам свою аудиторию. Весь материал предоставлен бесплатно, в знак благодарности мы просим Вас поделиться ссылками в социальных сетях и по возможности добавьте наш сайт MirPpt.ru в закладки.

Нажмите для просмотра
Алгоритмы сортировки

1: Алгоритмы сортировки Класс алгоритмов сортировки один из самых больших и наиболее часто используемых. Д. Кнут Искусство программирования для ЭВМ Т. 3. Сортировка и поиск ООО «И. Д. Вильямс» 2001

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

3: Терминология Сортировка называется устойчивой, если она удовлетворяет такому дополнительному условию, что записи с одинаковыми ключами остаются в прежнем порядке Сортировка классифицируется как внутренняя, если сортируемые записи находятся в оперативной памяти, и как внешняя, если некоторые из сортируемых записей находятся во вспомогательной памяти.

4: Цель изучения алгоритмов сортировки разобраться в принципах построения этих алгоритмов, чтобы не тратить время на изобретение велосипеда; не использовать заведомо неэффективные алгоритмы сортировки; определить характерные ситуации, в которых эффективны те или иные алгоритмы или их комбинации; определить принципы оценки эффективности алгоритмов сортировки.

5: Факторы, влияющие на производительность сортировки (параметры сортировки) -число и размер сортируемых записей; -тип и размер ключа; -характер упорядоченности сортируемых данных (почти отсортированная последовательность, случайная последовательность, почти отсортированная наоборот); -повторяемость значений ключа; -используемый резерв памяти.

6: Критерии эффективности 1.      Основным критерием является время выполнения (T), поскольку именно им характеризуется скорость сортировки. 2.      Время выполнения напрямую зависит от количества сравнений ключей (C) и количества перестановок элементов(P). 3.      Размер оперативной памяти компьютера ограничен, поэтому немаловажным критерием является использование памяти в процессе сортировки (M). 4.      Стек программы в адресном пространстве ограничен, поэтому при анализе алгоритма нужно учесть критерий использования рекурсии(R). Большинство классических сортировок имеют временные затраты, которые варьируются от 0(nlogn) до 0(n2).

7: методы определения временных затрат сортировки Имеются два способа определения временных затрат сортировки, причем ни один из них не дает результатов, которые применимы для всех случаев. Первый состоит в проведении анализа различных случаев (наилучшего, наихудшего, среднего). Результатом этого анализа часто является некоторая формула, задающая среднее время (или число операций) сортировки в зависимости от размера файла n. Второй метод - запуск программы на ЭВМ. При этом набирается статистика на различных файлах.

8: Рекомендации Какая либо сортировка не должна выбираться просто потому, что она имеет порядок 0(nlogn), т. к. при разных n она может вести себя по разному. В качестве критерия сравнения различных методов сортировки удобно использовать сравнение критических ситуаций (почти упорядоченная, случайная упорядоченность, почти упорядоченная наоборот).

9: Рекомендации по выбору метода сортировки В большинстве случаев время, необходимое для некоторой сортировки, зависит от первоначальной последовательности данных. Если имеется некоторая информация о первоначальной последовательности данных, то можно принять более обоснованное решение о том, какой метод сортировки использовать. Если нет такой информации, можно выбрать некоторую сортировку основываясь на самом худшем или на среднем варианте. Также выбор сортировки зависит от того, как часто изменяется последовательность данных. Желательно иметь дело с сортировками имеющими сложность O(nlogn)

10: Классификация методов внутренних сортировок

11: СОРТИРОВКИ ВСТАВКАМИ Простые вставки Бинарные вставки Двухпутевые вставки Вставки в список Вставка в дерево Сортировка Шелла Сортировка с вычислением адреса и т. д.

12: Простые вставки Сортировка в этом случае осуществляется путем вставки очередного элемента после меньшего. Рассмотрим на примере 25 57 48 37 12 92 86 33 25 57 48 37 12 92 86 33 25 48 57 37 12 92 86 33 25 37 48 57 12 92 86 33 12 25 37 48 57 92 86 33 12 25 37 48 57 92 86 33 12 25 37 48 57 86 92 33 12 25 33 37 48 57 86 92

13: Анализ Если последовательность отсортирована, то на каждом просмотре делается одно сравнение и сложность 0(n). Если последовательность отсортирована наоборот, то сложность 0(n2). Чем ближе файл к отсортированному виду, тем более эффективной становится сортировка простыми вставками. Метод простых вставок в среднем требует n2/4 сравнений.

14: Бинарные вставки Работу метода проиллюстрируем на примере. Если вставляется 64 элемент, то сначала он сравнивается с 32 элементом, затем если он меньше, то сравнивается с 16 элементом, а если больше с 48 элементом и т. д. Место для 64 элемента будет найдено за 6 сравнений. Однако бинарные вставки решают задачу только наполовину: после нахождения места вставки нужно передвинуть примерно n/2 ранее отсортированных записей, чтобы освободить место вставляемой записи.

15: Двухпутевые вставки Проблему сдвига можно решить методом двухпутевых вставок. Суть его в следующем: первый элемент вставляется в середину последовательности, а место для последующих элементов освобождается при помощи сдвигов влево или вправо. Например, имеем последовательность: 25 57 48 37 12 92 86 33 25 25 57 25 48 57 25 37 48 57 12 25 37 48 57 12 25 37 48 57 92 12 25 37 48 57 86 92 12 25 33 37 48 57 86 92

16: Вставки в список Анализ структур данных, позволяющий избежать ненужных операций, часто дает существенный эффект. Рассматриваемую последовательность можно представить как линейный список. Для того, чтобы вставить k-й элемент, организуется прохождение данного связанного списка до тех пор, пока не будут найдены нужная позиция для x(k) или конец списка. В этот момент x(k) может быть вставлен в список при помощи настройки указателей, без сдвига элементов в последовательности. Это уменьшает время необходимое для вставки, но не время необходимое для поиска. Требование на пространство также возрастает из-за дополнительного массива p.

17: Вставка в дерево Простейшая сортировка с использованием бинарных деревьев состоит в просмотре каждого элемента входной последовательности и помещение элемента в соответствующую позицию в некотором бинарном дереве. Для того чтобы найти соответствующую позицию некоторого элемента, в каждом узле происходит выбор левой или правой ветви в зависимости от того, меньше вставляемый элемент элемента в этом узле, либо больше или равен ему. Когда каждый элемент находится на своем месте в дереве, отсортированная последовательность может быть получена при помощи просмотра этого дерева в симметричном порядке.

18: пример 25 57 48 37 12 92 86 33

19: Сортировка Шелла Существенного улучшения можно достигнуть используя сортировку Шелла (или сортировку с убывающим шагом). Суть метода состоит в разделении последовательности на части и сортировка этих частей (обычно при помощи метода простых вставок). Количество частей k называется шагом. Затем выбирается меньшее значение шага k и процесс повторяется. Последнее значение шага k должно быть 1.

20: пример Например, начальная последовательность имеет вид: 25 57 48 37 12 92 86 33, последовательность шагов 5 3 1. Первая итерация (k5) (x(1)25, x(6)92) (x(2)57, x(7)86) (x(8)33, x(3)48) (x(4)37) (x(5)12) 25 57 33 37 12 92 86 48 Вторая итерация (k3) (x(1)25, x(4)37, x(7)86) (x(5)12, x(8)48, x(2)57) (x(3)33, x(6)92) 25 12 33 37 48 92 86 57 Третья итерация (k1) 12 25 33 37 48 57 86 92

21: Анализ Уже отмечалось, что сортировка простыми вставками очень эффективна для последовательности, которая почти упорядочена. Важно также понимать, что когда размер последовательности n мал, то сортировка порядка 0(n2) часто более эффективна, чем сортировка порядка 0(n log n), т. к. последняя требует как правило дополнительных действий. Анализ эффективности сортировки Шелла математически достаточно сложен. Можно показать, что порядок сложности сортировки Шелла может быть аппроксимирован величиной 0(n(log n)2), если используется подходящая последовательность шагов (т. е. количества шагов на разных итерациях должны быть взаимно простыми числами).

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

23: пример Рассмотрим последовательность 25 57 48 37 12 92 86 33 Создадим десять частей для каждой из 10 возможных цифр элементов последовательности. Каждая часть строится как отсортированный связанный список. Первоначально каждая часть пуста. Используем функцию хеширования H x div 10. Тогда части выглядят следующим образом: 0 112 225 333 37 448 557 6 7 8 86 992

24: Анализ Кнут показал, что среднем случае сложность метода равно 0(n). Этот результат справедлив только тогда, когда вероятность хеширования любого ключа в любое число от 1 до m равна 1/m. Наихудший случай, когда все ключи отображаются в одну часть. При этом оценка метода ухудшается до 0(n2).

25: Сравнение алгоритмов сортировок вставками

26: ОБМЕННЫЕ СОРТИРОВКИ Сортировка методом пузырька Быстрая сортировка (Обменная сортировка с разделением) Параллельная сортировка Бэтчера (Обменная сортировка со слиянием. Алгоритм Бэтчера) Обменная поразрядная сортировка цифровая сортировка («карманная сортировка»)

27: Сортировка методом пузырька Сортировка методом пузырька проста для усвоения и программирования, но наверное самая неэффективная. Идея этого метода состоит в том, чтобы просмотреть файл последовательно несколько раз, а на каждом просмотре сравнить предыдущий и последующий элемент и в случае необходимости поменять местами (транспозиция).

28: Пример Рассмотрим следующий файл: 25 57 48 37 12 92 86 33 итер. 1)25 48 37 12 57 86 33 92 итер. 2)25 37 12 48 57 33 86 92 итер. 3)25 12 37 48 33 57 86 92 итер. 4)12 25 37 33 48 57 86 92 итер. 5)12 25 33 37 48 57 86 92 итер. 6)12 25 33 37 48 57 86 92 итер. 7)12 25 33 37 48 57 86 92

29: улучшения метода Поскольку все элементы в позициях, больших или равных n-i1, уже находятся после i- ой итерации, на нужных местах, то нет необходимости рассматривать их на последующих итерациях. Файл может быть отсортирован раньше чем за n-1 просмотр (см. пример). Для исключения ненужных просмотров целесообразно сохранять информацию о транспозиции элементов на каждом просмотре. Отсутствие транспозиции свидетельствует о том, что файл отсортирован. Возможны и другие усовершенствования этого метода (например чередование просмотров в прямом и обратном направлении – шейкер сортировка). Этот метод нежелательно использовать для таблиц большого размера (более 15).

30: Анализ Заметим, что для файла из n элементов требуется не более n-1 итераций. Оценка эффективности сортировки методом пузырька проста. Имеется (n-1) просмотров и (n-1) сравнений на каждом просмотре. Общее число сравнений (n-1)(n-1)n2-2n1 , что составляет 0(n2). Число транспозиций меньше числа сравнений. Возможные улучшения метода приводят к тому, что среднее число итераций меньше, но сложность остаётся 0(kn2), и сомножитель k меньше.

31: Быстрая сортировка (Обменная сортировка с разделением) Эффективна для больших файлов (таблиц). Цель каждого шага метода – помещение очередного элемента на его конечную позицию внутри последовательности. В результате все предшествующие элементы будут иметь меньшее значение, а последующие – большее. При этом последовательность делится на две части. Аналогичный процесс может быть применим рекурсивно к каждой из этих частей до тех пор пока все элементы не станут на свои места

32: пример 25 57 48 37 12 92 86 33 Используются два индекса i и j с начальными значениями 1 и n соответственно. Сравниваем элементы ai и aj . Если перестановка не требуется, то j уменьшается на единицу и процесс повторяется. Если ai aj , они меняются местами, i увеличивается на единицу и процесс повторяется, пока не возникнет другая перестановка. В этом случае j будет уменьшена на единицу и т. д. Последовательность перестановок для помещения элемента 25 в его конечную позицию имеет вид: 25 57 48 37 12 92 86 33 25 57 48 37 12 92 86 33 25 57 48 37 12 92 86 33 25 57 48 37 12 92 86 33 12 57 48 37 25 92 86 33 12 25 48 37 57 92 86 33 12 25 48 37 57 92 86 33

33: Анализ В результате элементы разбиты на две части, к каждой из которых рекурсивно может применена эта процедура, пока файл не окажется полностью отсортирован. Для хранения границ подфайлов используется стек. При n оценка сложности асимптотически приближается к О(nlog2n).

34: Параллельная сортировка Бэтчера (Обменная сортировка со слиянием. Алгоритм Бэтчера) Суть – происходит слияние пар отсортированных подпоследовательностей. Проблема – как формировать эти пары. Метод далеко не очевиден. Два доказательства можно найти у Кнута т. 3. Если мы хотим получить алгоритм обменной сортировки, время работы которого имеет порядок, меньший N2, то необходимо подбирать для сравнений некоторые пары несоседних ключей (К i, К j); иначе придется выполнить столько обменов, сколько инверсий имеется в исходной перестановке, а среднее число инверсий равно (N 2 - N)/4 Схема сортировки Бэтчера несколько напоминает сортировку Шелла, но сравнения выполняются по-новому, так что распространение обменов не обязательно.

35: Схема алгоритма

36: Пример Рассмотрим работу этого алгоритма на последовательности p q r d 25 57 48 37 12 92 86 33 4 4 0 4 12 57 48 33 25 92 86 37 2 4 0 2 12 33 48 57 25 37 86 92 2 2 2 2 12 33 25 37 48 57 86 92 1 4 0 1 12 33 25 37 48 57 86 92 1 2 1 3 12 33 25 37 48 57 86 92 1 1 1 1 12 25 33 37 48 57 86 92

37: Анализ Алгоритм достаточно сложный. Однако он обладает компенсирующим качеством. Все обмены и сравнения можно вести на устройствах допускающих параллельные вычисления. В этом случае это один из самых быстрых методов и выполняется за 1/2log2N (log2N1) шагов. Например, 1024 элемента можно отсортировать методом Бэтчера всего за 55 параллельных шагов. Его ближайшим соперником является метод Пратта если мы готовы допустить перекрытие сравнений до тех пор, пока не потребуется выполнять перекрывающиеся обмены, то для сортировки 1024 элементов методом Пратта требуется всего 40 циклов сравнения/обмена.

38: Обменная поразрядная сортировка Отличительная черта этого метода – двоичное представление ключей и сравниваются отдельные биты ключей. В общих чертах этот алгоритм можно описать следующим образом: Последовательность сортируется по старшему биту так, чтобы все ключи, начинающиеся с 0, оказались перед всеми ключами, начинающимися с 1. Для этого надо найти самый левый ключ Кi, начинающийся с 1, и самый правый ключ Кj, начинающийся с 0. меняются местами. Процесс повторяется, пока не станет i j. Пусть F0 - множество элементов, начинающихся с 0, а F1 – все остальные. Применим к F0 поразрядную сортировку (начав со второго бита слева) до тех пор, пока множество F0 не будет полностью отсортировано, затем проделаем тоже с F1

39: Анализ Число стадий и число проверок несколько больше чем в быстрой сортировке, но при больших n в действительности меньше, в предположении о равномерном расположении ключей. Как и в быстрой сортировке, для хранения «информации о границах» подфайлов, ожидающих сортировки, можно воспользоваться стеком. Обменная поразрядная сортировка в стандартном варианте не очень эффективна, если имеются одинаковые ключи.

40: «цифровая сортировка» («карманная сортировка») Рассмотрим обобщение обменной поразрядной сортировки на случай счисления с основанием большим 2. Например необходимо отсортировать колоду из 52 игральных карт в соответствии Т 2 3 …. . 10 В Д К и по масти пика

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

42: пример Очереди, организованные по МЗЦ. 0 1 2 12 92 3 33 4 5 25 6 86 7 57 37 8 48 9 После первого просмотра 12 92 33 25 86 57 37 48

43: Анализ Временные затраты на метод поразрядной сортировки зависят от числа цифр (m) в ключе элемента и числа элементов в последовательности (n). Порядок сложности данной сортировки составляет О (m n)

44: Сравнение алгоритмов обменных сортировок

45: Сортировки посредством выбора Сортировка посредством простого выбора Квадратичный выбор Выбор из дерева Сортировка методом турнира с выбыванием Пирамидальная сортировка (Сортировка с помощью кучи) Наибольший из включенных первым исключается Характерная черта – все сортировки требуют наличия всех элементов до начала сортировки

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

47: пример 25 57 48 37 12 92 86 33 25 57 48 37 12 33 86 92 25 57 48 37 12 33 86 92 25 33 48 37 12 57 86 92 25 33 12 37 48 57 86 92 25 33 12 37 48 57 86 92 25 12 33 37 48 57 86 92 12 25 33 37 48 57 86 92 Анализ показывает, что алгоритм чуть медленнее простых вставок, но предпочтительней метода пузырька (меньше число обменов).

48: Квадратичный выбор Возможно улучшение алгоритма простого выбора за счёт использования извлечённой раньше информации при последующих выборах. Один из способов сэкономить время на последующих выборах – разбить последовательность на группы. В нашем случае на 2 группы и в каждой группе определяем наибольший элемент. 25 57 48 37 12 92 86 33

49: Сортировка методом турнира с выбыванием Рассмотрим эту сортировку на примере турнира команд A,B,C,D,E,K,L,M. Команда Е на первом месте за семь матчей (сравнений) Второе место можно определить, если команда A сыграет с командой K, а победитель с командой L , т. е. два дополнительных матча (сравнения). Аналогично определяем другие места.

50: Выбор из дерева Дерево строится следующим образом: каждому первоначальному элементу приписывается некоторый узел (лист) в некотором бинарном дереве; Затем выбираются два узла (листа). Наибольшее значение из них присваивается узлу – отцу. Этот процесс повторяется до тех пор пока не останется один лист или ни одного. Если остается один лист, то этот узел надо переместить вверх на следующий уровень. Затем процесс с заново созданными узлами надо повторить до тех пор, пока самое большое число не будет помещено в корень бинарного дерева. Узел являющийся листом со значением корня заменяется минимальным числом. Содержимое всех предков до корня этого листа повторно вычисляется. Этот процесс повторяется до тех пор, пока не будут выведены все листья первоначального дерева.

51: пример Рассмотрим этот алгоритм на последовательности 25 57 48 37 12 92 86 33

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

53: Пирамидальная сортировка (сортировка с помощью пирамиды) состоит из двух частей: Сначала вызывается процедура построения пирамиды (см. Бинарные кучи). Идея второй части проста: максимальный элемент массива теперь находится в корне дерева (A1). Его следует поменять с Аn, уменьшить размер кучи на 1 и восстановить основное свойство в корневой вершине (поскольку поддеревья с корнями left(i) и right(i) не утратили основного свойства пирамиды, это можно сделать с помощью процедуры savek). После этого в корне будет находиться максимальный из оставшихся элементов. Так делается до тех пор, пока в пирамиде не останется всего один элемент.

54: пример Для последовательности 57 48 37 12 92 86 33 бинарная пирамида имеет вид как на рис Или в виде массива 92 37 86 33 12 48 57 25

55: Сравнение алгоритмов сортировок выбором

56: Эфективность

Скачать презентацию


MirPpt.ru