Transcript
Page 1: Алгоритмы  поиска и сортировки

Алгоритмы.

Page 2: Алгоритмы  поиска и сортировки

Алгоритмы cуммирования

Page 3: Алгоритмы  поиска и сортировки

Алгоритм

Алгоритм — это набор инструкций, описывающих

порядок действий исполнителя для достижения результата решения задачи за конечное число действий.

Page 4: Алгоритмы  поиска и сортировки

Входные данные

Входные данные — величины, которые задаются до начала работы алгоритма или определяются динамически во время его работы.

Page 5: Алгоритмы  поиска и сортировки

Вычислительная сложность алгоритма

Сложность - это количественная оценка

ресурсов, затрачиваемых алгоритмом.

Page 6: Алгоритмы  поиска и сортировки

Вычислительная сложность алгоритма

Вычислительная сложность алгоритма — это понятие в информатике и теории

алгоритмов, обозначающее функцию зависимости объёма работы, которая выполняется

некоторым алгоритмом, от размера входных данных.

Page 7: Алгоритмы  поиска и сортировки

Вычислительная сложность алгоритма

Время — основной параметр, характеризующий быстродействие алгоритма. Называется также вычислительной сложностью. Память — ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. Как правило, эти алгоритмы требуют O(log n) памяти.

Page 8: Алгоритмы  поиска и сортировки

Вычислительная сложность алгоритма

Page 9: Алгоритмы  поиска и сортировки

f(n) ϵ O(g(n))

f ограничена сверху функцией g (с точностью до постоянного множителя) асимптотически

f(n) ϵ Ω(g(n))

f ограничена снизу функцией g (с точностью до постоянного множителя) асимптотически

f(n) ϵ Θ(g(n))

f ограничена снизу и сверху функцией g асимптотически

Асимптотическая сложность

Page 10: Алгоритмы  поиска и сортировки

Графики функций O

Page 11: Алгоритмы  поиска и сортировки

Графики функций ʘ

Page 12: Алгоритмы  поиска и сортировки

Последовательный вариант сумирования

Page 13: Алгоритмы  поиска и сортировки

Вариант с разбиением суммирования по столбцам, последовательно-иерархический

Page 14: Алгоритмы  поиска и сортировки

Каскадныая схема суммирования

1 3

4

8 7

15

19

Page 15: Алгоритмы  поиска и сортировки

Измерение времени работы алгоритма

Получить количество миллисикунд прошедших с 1 января 1970 г.long startTime = System.currentTimeMillis();ваш код;ваш код;ваш код;long endTime = System.currentTimeMillis();long workTime = endTime – startTime;

Page 16: Алгоритмы  поиска и сортировки

Поиск

Page 17: Алгоритмы  поиска и сортировки

Линейный поиск

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

Page 18: Алгоритмы  поиска и сортировки

Бинарный (двоичный) поиск

Двоичный (бинарный) поиск (также известен как метод деления пополам и дихотомия) — классический алгоритм поиска элемента в отсортированном массиве (векторе), использующий дробление массива на половины. Сложность алгоритма O(log n)Arrays.binarySearch(mas)

Page 19: Алгоритмы  поиска и сортировки

Бинарный поиск

Page 20: Алгоритмы  поиска и сортировки

Бинарный поиск

Определение индекса центрального элемента.

int mid = (left + right) / 2;Может вызвать переполнение на массивах с большим размером

Более правильный метод int mid = left + (right - left) / 2;

Page 21: Алгоритмы  поиска и сортировки

Бинарный поиск

Допустим мы ищем число 31.

27 < 31 поэтому продолжаем поиск в правой части

Новая левая граница расчитывается по формулеleft = mid + 1;

Page 22: Алгоритмы  поиска и сортировки

Бинарный поиск

35 > 31 поэтому продолжаем поиск в левой части

Новая правая граница расчитывается по формулеright = mid - 1;

Page 23: Алгоритмы  поиска и сортировки

Нахождения первого элемента

Page 24: Алгоритмы  поиска и сортировки
Page 25: Алгоритмы  поиска и сортировки

Алгоритмы

Сортировка

Page 26: Алгоритмы  поиска и сортировки

Определение

Алгоритм сортировки — это алгоритм для упорядочивания элементов в списке. В случае, когда элемент списка имеет несколько полей, поле, служащее критерием порядка, называется ключом сортировки

Page 27: Алгоритмы  поиска и сортировки

Цели сортировки

необходимо вывести все записи в возрастающем или убывающем порядке;

необходимо взять из массива фиксированное количество максимальных или минимальных элементов (пример 20 самых больших из массива в 100 элементов);

Page 28: Алгоритмы  поиска и сортировки

Цели сортировки

поиск всех дубликатов в массиве; этап подготовки массива к поиску элементов с помощью алгоритма бинарного поиска;

этап подготовки массива к поиску диапазонов с помощью алгоритма бинарного поиска;

Page 29: Алгоритмы  поиска и сортировки

Свойства и классификация

Степень роста сложности – лучший случай, средний случай, худший случай.Устойчивость (англ. stability) — устойчивая сортировка не меняет взаимного расположения элементов с одинаковыми ключами.Алгоритм сортировки

Page 30: Алгоритмы  поиска и сортировки

Свойства и классификация

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

Page 31: Алгоритмы  поиска и сортировки

Сортировка пузырьком

Сортировка пузырьком (англ. Bubble sort) — для каждой пары индексов производится обмен, если элементы расположены не по порядку. Учебный алгоритм

Сложность алгоритма: O(n2).Устойчивый. Естественное поведение

Page 32: Алгоритмы  поиска и сортировки

Характеристики

Структура данных Массив

Худшее время O(n2)

Лучшее время O(n)

Среднее время O(n2)

Затраты памяти O (1)

Устойчивость Нет

Естественное поведение Да

Page 33: Алгоритмы  поиска и сортировки

Сортировка пузырьком

Page 34: Алгоритмы  поиска и сортировки

Сортировка пузырьком

Page 35: Алгоритмы  поиска и сортировки

Сортировка выбором

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

Неостойчив, ведёт себя не естественно.

Page 36: Алгоритмы  поиска и сортировки

Сортировка выбором

Page 37: Алгоритмы  поиска и сортировки

Сортировка выбором

Page 38: Алгоритмы  поиска и сортировки

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

Page 39: Алгоритмы  поиска и сортировки

Сортировка вставками

анг. Insertion sort Определяем, где текущий элемент должен находиться в упорядоченном списке, и вставляем его туда. Сложность алгоритма: O(n2).Устойчивый. Естественное поведение.

Page 40: Алгоритмы  поиска и сортировки

Сортировка вставками

Page 41: Алгоритмы  поиска и сортировки

Сортировка вставками

Page 42: Алгоритмы  поиска и сортировки

Сортировка вставками

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

Page 43: Алгоритмы  поиска и сортировки

Сортировка вставками

может сортировать список по мере его получения;

использует O(1) временной памяти, включая стек.

может работать значительно быстрее за счёт бинарного поиска

Минусы:Очень высокая вычислительная

сложность алгоритма  (при использовании стандартного алгоритма).

Page 44: Алгоритмы  поиска и сортировки

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

Page 45: Алгоритмы  поиска и сортировки

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

Page 46: Алгоритмы  поиска и сортировки

Сравнение сортировок

Page 47: Алгоритмы  поиска и сортировки

Сортировка Шелла (Shell sort)

Сортировка Шелла — алгоритм сортировки, являющийся усовершенствованным вариантом сортировки вставками. Идея метода Шелла состоит в сравнении элементов, стоящих не только рядом, но и на определённом расстоянии друг от друга. Иными словами — это сортировка вставками с предварительными «грубыми» проходами. 

Page 48: Алгоритмы  поиска и сортировки

Сортировка Шелла

Page 49: Алгоритмы  поиска и сортировки

Quicksort

Quicksort - Широко известен как быстрейший из известных для упорядочения больших случайных списков, с разбиением исходного набора данных на две половины так, что любой элемент первой половины упорядочен относительно любого элемента второй половины.

Page 50: Алгоритмы  поиска и сортировки

Быстрая сортировка

Затем алгоритм применяется рекурсивно к каждой половине. При использовании дополнительной памяти, можно сделать сортировку устойчивой.Разработанный английским информатиком Чарльзом Хоаром во время его работы в МГУ в 1960 году.

Page 51: Алгоритмы  поиска и сортировки

Быстрая сортировка (Quicksort)

В варианте с минимальными затратами памяти сложность алгоритма O(n log n) — среднее время, O (n2)  — худший случай;

Page 52: Алгоритмы  поиска и сортировки

Quicksort

Page 53: Алгоритмы  поиска и сортировки

Сравнение сортировок

Page 54: Алгоритмы  поиска и сортировки

Пирамидальная сортировка

Page 55: Алгоритмы  поиска и сортировки

Timsort

Timsort — гибридный алгоритм сортировки, сочетающий сортировку вставками и сортировку слиянием, опубликованный в 2002 году Тимом Петерсом. В настоящее время Timsort является стандартным алгоритмом сортировки в Python, OpenJDK 7 и реализован в Android JDK 1.5.

Page 56: Алгоритмы  поиска и сортировки

Timsort

Основная идея алгоритма в том, что в реальном мире сортируемые массивы данных часто содержат в себе упорядоченные подмассивы. На таких данных Timsort существенно быстрее многих алгоритмов сортировки.

Page 57: Алгоритмы  поиска и сортировки

Плавная сортировка

Плавная сортировка — алгоритм сортировки выбором, разновидность пирамидальной сортировки, разработанная Э. Дейкстрой в 1981 году. Как и пирамидальная сортировка, имеет сложность в худшем случае равную O(n log n).

Page 58: Алгоритмы  поиска и сортировки

Плавная сортировка

Преимущество плавной сортировки в том, что её сложность приближается к O(n), если входные данные частично отсортированы, в то время как у пирамидальной сортировки сложность всегда одна, независимо от состояния входных данных.

Page 59: Алгоритмы  поиска и сортировки

Плавная сортировка

Page 60: Алгоритмы  поиска и сортировки

Другие алгоритмы сортировки

УстойчивыеСлиянием - O(n log n). Память O(n) С помощью двоичного дерева O(n log n). Память O(n).Подсчётом O(n+k). Память O(n+k)Блочная (корзинная вставка) O(n) Память О(k)

Неустойчивые•Сортировка Шелла•Сортировка расчёской•Пирамидальная•Интроспективная•Терпеливая•Поразрядная (цифровая)•Глупая•Блинная

Page 61: Алгоритмы  поиска и сортировки

Сводная таблица алгоритмов сортировки


Recommended