Скачать презентацию Алгоритмы и структуры данных Алгоритмы сортировки Содержание Скачать презентацию Алгоритмы и структуры данных Алгоритмы сортировки Содержание

01 - Алгоритмы сортировки.ppt

  • Количество слайдов: 59

Алгоритмы и структуры данных. Алгоритмы сортировки Алгоритмы и структуры данных. Алгоритмы сортировки

Содержание § Понятие алгоритма § Простые алгоритмы § Быстрые алгоритмы § Специальные алгоритмы Содержание § Понятие алгоритма § Простые алгоритмы § Быстрые алгоритмы § Специальные алгоритмы

1. Понятие алгоритма. 1. Понятие алгоритма.

1. Понятие алгоритма. Что такое алгоритм? Алгоритм (algorithm) — это любая корректно определенная вычислительная 1. Понятие алгоритма. Что такое алгоритм? Алгоритм (algorithm) — это любая корректно определенная вычислительная процедура, на вход (input) которой подается некоторая величина или набор величин, и результатом выполнения которой является выходная (output) величина или набор значений. Алгоритм представляет собой последовательность вычислительных шагов, преобразующих входные величины в выходные.

1. Понятие алгоритма. Свойства алгоритма: • Конечность – алгоритм должен заканчиваться после выполнения конечного 1. Понятие алгоритма. Свойства алгоритма: • Конечность – алгоритм должен заканчиваться после выполнения конечного числа шагов • Определенность – каждый шаг алгоритма должен быть точно определен • Ввод • Вывод • Эффективность – алгоритм считается эффективным, если все его операторы достаточно просты

1. Понятие алгоритма. • Алгоритм может быть задан на естественном языке, в виде компьютерной 1. Понятие алгоритма. • Алгоритм может быть задан на естественном языке, в виде компьютерной программы или даже воплощен в аппаратном обеспечении. Единственное требование — его спецификация должна предоставлять точное описание вычислительной процедуры, которую требуется выполнить.

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

2. Постановка задачи • Естественным условием, предъявляемым к любому методу внутренней сортировки является то, 2. Постановка задачи • Естественным условием, предъявляемым к любому методу внутренней сортировки является то, что эти методы не должны требовать дополнительной памяти: все перестановки с целью упорядочения элементов массива должны производиться в пределах того же массива. Мерой эффективности алгоритма внутренней сортировки являются число требуемых сравнений значений ключа (C) и число перестановок элементов (M)

3. Основные алгоритмы 3. Основные алгоритмы

3. 1 Сортировка Выбором 3. 1 Сортировка Выбором

3. 1 Сортировка Выбором Оценки алгоритма • В наихудшем случае • В среднем случае 3. 1 Сортировка Выбором Оценки алгоритма • В наихудшем случае • В среднем случае

3. 2 Сортировка включением • Пусть имеется массив ключей a[1], a[2], . . . 3. 2 Сортировка включением • Пусть имеется массив ключей a[1], a[2], . . . , a[n]. Для каждого элемента массива, начиная со второго, производится сравнение с элементами с меньшим индексом (элемент a[i] последовательно сравнивается с элементами a[i-1], a[i-2]. . . ) и до тех пор, пока для очередного элемента a[j] выполняется соотношение a[j] > a[i], a[i] и a[j] меняются местами. Если удается встретить такой элемент a[j], что a[j] <= a[i], или если достигнута нижняя граница массива, производится переход к обработке элемента a[i+1] (пока не будет достигнута верхняя граница массива).

3. 2 Сортировка включением 3. 2 Сортировка включением

3. 2 Сортировка включением Оценки алгоритма • В наихудшем случае 3. 2 Сортировка включением Оценки алгоритма • В наихудшем случае

3. 3 Пузырьковая Сортировка • Алгоритм пузырьковой сортировки совершает несколько проходов по списку. Начиная 3. 3 Пузырьковая Сортировка • Алгоритм пузырьковой сортировки совершает несколько проходов по списку. Начиная с конца массива сравниваются два соседних элемента (a[n] и a[n-1]). Если выполняется условие a[n-1] > a[n], то значения элементов меняются местами. Процесс продолжается для a[n-1] и a[n-2] и т. д. , пока не будет произведено сравнение a[2] и a[1]. Понятно, что после этого на месте a[1] окажется элемент массива с наименьшим значением. На втором шаге процесс повторяется, но последними сравниваются a[3] и a[2]. И так далее. На последнем шаге будут сравниваться только текущие значения a[n] и a[n-1].

3. 3 Пузырьковая Сортировка 3. 3 Пузырьковая Сортировка

3. 3 Пузырьковая Сортировка Оценки алгоритма • В наихудшем случае 3. 3 Пузырьковая Сортировка Оценки алгоритма • В наихудшем случае

3. 3 Пузырьковая Сортировка Метод пузырька допускает три простых усовершенствования. • Во-первых, как показывает 3. 3 Пузырьковая Сортировка Метод пузырька допускает три простых усовершенствования. • Во-первых, как показывает таблица, на четырех последних шагах расположение значений элементов не менялось. Поэтому, если на некотором шаге не было произведено ни одного обмена, то выполнение алгоритма можно прекращать. • Во-вторых, можно запоминать наименьшее значение индекса массива, для которого на текущем шаге выполнялись перестановки. Очевидно, что верхняя часть массива до элемента с этим индексом уже отсортирована, и на следующем шаге можно прекращать сравнения значений соседних элементов при достижении такого значения индекса. • В-третьих, метод пузырька работает неравноправно для "легких" и "тяжелых" значений. Легкое значение попадает на нужное место за один шаг, а тяжелое на каждом шаге опускается по направлению к нужному месту на одну позицию.

3. 3 Шейкерная сортировка На каждом следующем шаге меняется направление последовательного просмотра. В результате 3. 3 Шейкерная сортировка На каждом следующем шаге меняется направление последовательного просмотра. В результате на одном шаге "всплывает" очередной наиболее легкий элемент, а на другом "тонет" очередной самый тяжелый.

3. 3 Шейкерная сортировка 3. 3 Шейкерная сортировка

3. 4 сортировка Шелла • Дальнейшее развитие метода сортировки включением • Для массива с 3. 4 сортировка Шелла • Дальнейшее развитие метода сортировки включением • Для массива с 2^n элементами алгоритм работает следующим образом. На первой фазе производится сортировка включением всех пар элементов массива, расстояние между которыми есть 2^(n-1). На второй фазе производится сортировка включением элементов полученного массива, расстояние между которыми есть 2^(n-2). И так далее, пока мы не дойдем до фазы с расстоянием между элементами, равным единице, и не выполним завершающую сортировку с включениями.

3. 4 сортировка Шелла 3. 4 сортировка Шелла

3. 4 сортировка Шелла • В общем случае алгоритм Шелла переформулируется для заданной последовательности 3. 4 сортировка Шелла • В общем случае алгоритм Шелла переформулируется для заданной последовательности из t расстояний между элементами h 1, h 2, . . . , ht, для которых выполняются условия h 1 = 1 и h(i+1) < hi. • При правильно подобранных t и h сложность алгоритма Шелла является O(n^3/2))

З. 5 Быстрая сортировка (Quicksort) • Основа алгоритма была разработана в 1960 году (C. З. 5 Быстрая сортировка (Quicksort) • Основа алгоритма была разработана в 1960 году (C. A. R. Hoare) • Быстрая сортировка популярна ввиду легкости ее реализации; это довольно хороший алгоритм общего назначения, который хорошо работает во многих ситуациях, и использует при этом меньше ресурсов, чем другие алгоритмы.

З. 5 Быстрая сортировка • Случайным образом выбирается некоторый элемент массива x, после чего З. 5 Быстрая сортировка • Случайным образом выбирается некоторый элемент массива x, после чего массив просматривается слева, пока не встретится элемент a[i] такой, что a[i] > x, а затем массив просматривается справа, пока не встретится элемент a[j] такой, что a[j] < x. Эти два элемента меняются местами, и процесс просмотра, сравнения и обмена продолжается, пока мы не дойдем до элемента x. В результате массив окажется разбитым на две части - левую, в которой значения ключей будут меньше x, и правую со значениями ключей, большими x. Далее процесс рекурсивно продолжается для левой и правой частей массива до тех пор, пока каждая часть не будет содержать в точности один элемент.

З. 5 Быстрая сортировка З. 5 Быстрая сортировка

З. 5 Быстрая сортировка Оценки алгоритма • Алгоритм недаром называется быстрой сортировкой, поскольку для З. 5 Быстрая сортировка Оценки алгоритма • Алгоритм недаром называется быстрой сортировкой, поскольку для него оценкой числа сравнений и обменов является O(nlog n)

З. 5 Быстрая сортировка • Недостатки алгоритма состоят в том, что он рекурсивен (реализация З. 5 Быстрая сортировка • Недостатки алгоритма состоят в том, что он рекурсивен (реализация очень затруднена когда рекурсия недоступна), в худшем случае он требует N 2 операций, кроме того он очень "хрупок": небольшая ошибка в реализации, которая легко может пройти незамеченной, может привести к тому, что алгоритм будет работать очень плохо на некоторых файлах.

З. 5 Быстрая сортировка Методы улучшения быстрой сортировки. 1. Небольшие Подфайлы - следует использовать З. 5 Быстрая сортировка Методы улучшения быстрой сортировки. 1. Небольшие Подфайлы - следует использовать самый лучший метод сортировки когда мы встречаем небольшой подфайл 2. Деление по Медиане из Трех - использования лучшего делящего элемента. 3. Нерекурсивная реализация

3. 6 Сортировка со слиянием • Пусть имеются два отсортированных в порядке возрастания массива 3. 6 Сортировка со слиянием • Пусть имеются два отсортированных в порядке возрастания массива p[1], p[2], . . . , p[n] и q[1], q[2], . . . , q[n] и имеется пустой массив r[1], r[2], . . . , r[2? n], который мы хотим заполнить значениями массивов p и q в порядке возрастания. Для слияния выполняются следующие действия: сравниваются p[1] и q[1], и меньшее из значений записывается в r[1]. Предположим, что это значение p[1]. Тогда p[2] сравнивается с q[1] и меньшее из значений заносится в r[2]. Предположим, что это значение q[1]. Тогда на следующем шаге сравниваются значения p[2] и q[2] и т. д. , пока мы не достигнем границ одного из массивов. Тогда остаток другого массива просто дописывается в "хвост" массива r.

3. 6 Сортировка со слиянием 3. 6 Сортировка со слиянием

3. 6 Сортировка со слиянием Merge. Sort (list, first, last) list сортируемый список элементов 3. 6 Сортировка со слиянием Merge. Sort (list, first, last) list сортируемый список элементов first номер первого элемента в сортируемой части списка last номер последнего элемента в сортируемой части списка if first

3. 6 Сортировка со слиянием 3. 6 Сортировка со слиянием

3. 6 Сортировка со слиянием Сложность алгоритма • В худшем O(n. Logn) 3. 6 Сортировка со слиянием Сложность алгоритма • В худшем O(n. Logn)

4. Сравнение алгоритмов 4. Сравнение алгоритмов

4. Специальные алгоритмы 4. Специальные алгоритмы

4. Специальные алгоритмы Все рассмотренные алгоритмы обладают одним общим свойством: при сортировке используется только 4. Специальные алгоритмы Все рассмотренные алгоритмы обладают одним общим свойством: при сортировке используется только сравнение входных элементов. Назовем такие алгоритмы сортировки сортировкой сравнением (comparison sorts). Сейчас мы рассмотрим алгоритмы, в которых для определения правильного порядка элементов применяются операции, отличные от сравнений,

4. 1 Сортировка подсчетом Предполагается, что все n входных элементов — целые числа, принадлежащие 4. 1 Сортировка подсчетом Предполагается, что все n входных элементов — целые числа, принадлежащие интервалу от 0 до к, где к —некоторая целая константа. Для каждого входного элемента х определить количество элементов, которые меньше х. С помощью этой информации элемент х можно разместить на той позиции выходного массива, где он должен находиться.

4. 1 Сортировка подсчетом Предполагается, на вход подается массив A[], длины n. Кроме того 4. 1 Сортировка подсчетом Предполагается, на вход подается массив A[], длины n. Кроме того массивы B[1, . . , n] и массив C[0, . . , k] В C[i] храним кол-во элементов, не превышающих i. Основной алгоритм выглядит так: for (i=n; i=1; downto 1) begin B[C[A[i]]]: =A[i] C[A[j]]: =C[A[i]]-1 end

4. 1 Сортировка подсчетом Исходный массив Построенный массив C[0, . . , k] 4. 1 Сортировка подсчетом Исходный массив Построенный массив C[0, . . , k]

4. 1 Сортировка подсчетом Шаг 1. i=8 B[C[A[8]]]: =A[8] 4. 1 Сортировка подсчетом Шаг 1. i=8 B[C[A[8]]]: =A[8]

4. 1 Сортировка подсчетом Шаг 2. i=7 B[C[A[7]]]: =A[7] 4. 1 Сортировка подсчетом Шаг 2. i=7 B[C[A[7]]]: =A[7]

4. 1 Сортировка подсчетом Шаг 3. i=6 B[C[A[6]]]: =A[6] 4. 1 Сортировка подсчетом Шаг 3. i=6 B[C[A[6]]]: =A[6]

4. 1 Сортировка подсчетом Шаг 4. i=5 B[C[A[5]]]: =A[5] 4. 1 Сортировка подсчетом Шаг 4. i=5 B[C[A[5]]]: =A[5]

4. 1 Сортировка подсчетом Шаг 5. i=4 B[C[A[4]]]: =A[4] 4. 1 Сортировка подсчетом Шаг 5. i=4 B[C[A[4]]]: =A[4]

4. 1 Сортировка подсчетом Шаг 6. i=3 B[C[A[3]]]: =A[3] 4. 1 Сортировка подсчетом Шаг 6. i=3 B[C[A[3]]]: =A[3]

4. 1 Сортировка подсчетом Шаг 7. i=2 B[C[A[2]]]: =A[2] 4. 1 Сортировка подсчетом Шаг 7. i=2 B[C[A[2]]]: =A[2]

4. 1 Сортировка подсчетом Шаг 8. i=1 B[C[A[1]]]: =A[1] 4. 1 Сортировка подсчетом Шаг 8. i=1 B[C[A[1]]]: =A[1]

4. 1 Сортировка подсчетом Сложность алгоритма • Если число k = O(n), тогда сложность 4. 1 Сортировка подсчетом Сложность алгоритма • Если число k = O(n), тогда сложность алгоритма O(n) Важное свойство алгоритма сортировки подсчетом заключается в том, что он устойчив: элементы с одним и тем же значением находятся в выходном массиве в том же порядке, что и во входном.

4. 2 Поразрядная сортировка Предполагается, что каждый из n элементов массива А — это 4. 2 Поразрядная сортировка Предполагается, что каждый из n элементов массива А — это число, в котором всего d цифр, причем первая цифра стоит в самом младшем разряде, а цифра под номером d — в самом старшем разряде: Radix_Sort(A, d) for (i : = 1; I = d; i++) do Устойчивая сортировка массива А по i-ой цифре

4. 2 Поразрядная сортировка 4. 2 Поразрядная сортировка

4. 2 Поразрядная сортировка 4. 2 Поразрядная сортировка

4. 2 Поразрядная сортировка 4. 2 Поразрядная сортировка

4. 2 Поразрядная сортировка 4. 2 Поразрядная сортировка

4. 2 Поразрядная сортировка Сложность алгоритма • сложность алгоритма O(n) 4. 2 Поразрядная сортировка Сложность алгоритма • сложность алгоритма O(n)

4. 3 Карманная сортировка Входные элементы подчиняются равномерному закону распределения, генерируются случайным процессом и 4. 3 Карманная сортировка Входные элементы подчиняются равномерному закону распределения, генерируются случайным процессом и равномерно распределены в интервале [0, 1) Нужно разбить интервал [0, 1) на n одинаковых интервалов, или карманов (buckets), а затем распределить по этим карманам n входных величин. Чтобы получить выходную последовательность, нужно просто выполнить сортировку чисел в каждом кармане, а затем последовательно перечислить элементы каждого кармана.

4. 3 Карманная сортировка Исходный массив и результат работы карманной сортировки 4. 3 Карманная сортировка Исходный массив и результат работы карманной сортировки

4. 3 Карманная сортировка Сложность алгоритма • сложность алгоритма O(n) 4. 3 Карманная сортировка Сложность алгоритма • сложность алгоритма O(n)

Литература • Дональд Кнут «Искусство программирования» • А. Ахо, Дж. Хопкрофт, Дж. Ульман «Построение Литература • Дональд Кнут «Искусство программирования» • А. Ахо, Дж. Хопкрофт, Дж. Ульман «Построение и анализ вычислительных алгоритмов» • Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн «Алгоритмы: построение и анализ»