Алгоритмы.
Алгоритмы cуммирования
Алгоритм
Алгоритм — это набор
инструкций, описывающих
порядок действий
исполнителя для достижения
результата решения задачи
за конечное число действий.
Входные данные
Входные данные — величины, которые
задаются до начала работы алгоритма
или определяются динамически во
время его работы.
Вычислительная сложность алгоритма
Сложность - это
количественная оценка
ресурсов,
затрачиваемых
алгоритмом.
Вычислительная сложность алгоритма
Вычислительная сложность
алгоритма — это понятие
в информатике и теории
алгоритмов, обозначающее
функцию зависимости объёма
работы, которая выполняется
некоторым алгоритмом, от размера
входных данных.
Вычислительная сложность алгоритма
Время — основной параметр,
характеризующий быстродействие
алгоритма. Называется также
вычислительной сложностью.
Память — ряд алгоритмов требует
выделения дополнительной памяти под
временное хранение данных. Как
правило, эти алгоритмы требуют O(log
n) памяти.
Вычислительная сложность алгоритма
f(n) ϵ
O(g(n))
f ограничена сверху функцией g (с
точностью до постоянного множителя)
асимптотически
f(n) ϵ
Ω(g(n))
f ограничена снизу функцией g (с
точностью до постоянного множителя)
асимптотически
f(n) ϵ
Θ(g(n))
f ограничена снизу и сверху функцией g
асимптотически
Асимптотическая сложность
Графики функций O
Графики функций ʘ
Последовательный вариант
сумирования
Вариант с разбиением суммирования по
столбцам, последовательно-иерархический
Каскадныая схема суммирования
1 3
4
8 7
15
19
Измерение времени работы алгоритма
Получить количество миллисикунд
прошедших с 1 января 1970 г.
long startTime = System.currentTimeMillis();
ваш код;
ваш код;
ваш код;
long endTime = System.currentTimeMillis();
long workTime = endTime – startTime;
Поиск
Линейный поиск
Поиск значения функции
осуществляется простым сравнением
очередного рассматриваемого значения
(как правило поиск происходит слева
направо, то есть от меньших значений
аргумента к большим) и, если значения
совпадают (с той или иной точностью),
то поиск считается
завершённым.
Бинарный (двоичный) поиск
Двоичный (бинарный) поиск (также
известен как метод деления пополам и
дихотомия) — классический алгоритм
поиска элемента в отсортированном
массиве (векторе), использующий
дробление массива на половины.
Сложность алгоритма O(log n)
Arrays.binarySearch(mas)
Бинарный поиск
Бинарный поиск
Определение индекса центрального элемента.
int mid = (left + right) / 2;
Может вызвать переполнение на массивах с большим
размером
Более правильный метод
int mid = left + (right - left) / 2;
Бинарный поиск
Допустим мы ищем число 31.
27 < 31 поэтому продолжаем поиск в
правой части
Новая левая граница расчитывается по
формуле
left = mid + 1;
Бинарный поиск
35 > 31 поэтому продолжаем поиск в
левой части
Новая правая граница расчитывается по
формуле
right = mid - 1;
Нахождения первого элемента
Алгоритмы  поиска и сортировки
Алгоритмы
Сортировка
Определение
Алгоритм сортировки — это алгоритм
для упорядочивания элементов в
списке. В случае, когда элемент списка
имеет несколько полей, поле, служащее
критерием порядка, называется ключом
сортировки
Цели сортировки
 необходимо вывести все записи в
возрастающем или убывающем
порядке;
 необходимо взять из массива
фиксированное количество
максимальных или минимальных
элементов (пример 20 самых больших
из массива в 100 элементов);
Цели сортировки
 поиск всех дубликатов в массиве;
 этап подготовки массива к поиску
элементов с помощью алгоритма
бинарного поиска;
этап подготовки массива к поиску
диапазонов с помощью алгоритма
бинарного поиска;
Свойства и классификация
Степень роста сложности – лучший
случай, средний случай, худший случай.
Устойчивость (англ. stability) —
устойчивая сортировка не меняет
взаимного расположения элементов с
одинаковыми ключами.
Алгоритм сортировки
Свойства и классификация
Естественность поведения —
эффективность метода при обработке уже
упорядоченных или частично упорядоченных
данных. Алгоритм ведёт себя естественно,
если учитывает эту характеристику входной
последовательности и работает лучше.
Использование операции сравнения.
Алгоритмы, использующие для сортировки
сравнение элементов между собой,
называются основанными на сравнениях.
Сортировка пузырьком
Сортировка пузырьком (англ. Bubble sort) —
для каждой пары индексов производится
обмен, если элементы расположены не по
порядку.
Учебный алгоритм
Сложность алгоритма: O(n2
).
Устойчивый. Естественное поведение
Характеристики
Структура данных Массив
Худшее время O(n2
)
Лучшее время O(n)
Сортировка пузырьком
Сортировка пузырьком
Сортировка выбором
Шаги алгоритма:
1.Находим номер минимального значения в
текущем списке
2.Производим обмен этого значения со
значением первой неотсортированной позиции
(обмен не нужен, если минимальный элемент
уже находится на данной позиции)
3.Сортируем хвост списка, исключив из
рассмотрения уже отсортированные элементы
Неостойчив, ведёт себя не
естественно.
Сортировка выбором
Сортировка выбором
Сравнение алгоритмов
Сортировка вставками
анг. Insertion sort
Определяем, где текущий элемент
должен находиться в упорядоченном
списке, и вставляем его туда.
Сложность алгоритма: O(n2
).
Устойчивый. Естественное поведение.
Сортировка вставками
Сортировка вставками
Сортировка вставками
Плюсы:
эффективен на небольших наборах
данных, на наборах данных до десятков
элементов может оказаться лучшим;
эффективен на наборах данных, которые
уже частично отсортированы;
это устойчивый алгоритм сортировки (не
меняет порядок элементов, которые уже
отсортированы);
Сортировка вставками
может сортировать список по мере его
получения;
использует O(1) временной памяти,
включая стек.
может работать значительно быстрее за
счёт бинарного поиска
Минусы:
Очень высокая вычислительная
сложность алгоритма (при использовании
стандартного алгоритма).
Сортировка слиянием
Сортировка слиянием
Сравнение сортировок
Сортировка Шелла (Shell sort)
Сортировка Шелла — алгоритм
сортировки, являющийся
усовершенствованным
вариантом сортировки вставками. Идея
метода Шелла состоит в сравнении
элементов, стоящих не только рядом, но и
на определённом расстоянии друг от
друга. Иными словами — это сортировка
вставками с предварительными «грубыми»
проходами.
Сортировка Шелла
Quicksort
Quicksort - Широко известен как
быстрейший из известных для
упорядочения больших случайных
списков, с разбиением исходного
набора данных на две половины так,
что любой элемент первой половины
упорядочен относительно любого
элемента второй половины.
Быстрая сортировка
Затем алгоритм применяется
рекурсивно к каждой половине. При
использовании дополнительной памяти,
можно сделать сортировку устойчивой.
Разработанный английским
информатиком Чарльзом Хоаром во
время его работы в МГУ в 1960 году.
Быстрая сортировка (Quicksort)
В варианте с минимальными затратами
памяти сложность алгоритма
O(n log n) — среднее время,
O (n2
) — худший случай;
Quicksort
Сравнение сортировок
Пирамидальная сортировка
Timsort
Timsort — гибридный алгоритм
сортировки, сочетающий сортировку
вставками и сортировку слиянием,
опубликованный в 2002 году Тимом
Петерсом. В настоящее время Timsort
является стандартным алгоритмом
сортировки в Python, OpenJDK 7 и
реализован в Android JDK 1.5.
Timsort
Основная идея алгоритма в том, что в
реальном мире сортируемые массивы
данных часто содержат в себе
упорядоченные подмассивы. На таких
данных Timsort существенно быстрее
многих алгоритмов сортировки.
Плавная сортировка
Плавная сортировка — алгоритм
сортировки выбором,
разновидность пирамидальной
сортировки, разработанная Э.
Дейкстрой в 1981 году.
Как и пирамидальная сортировка, имеет
сложность в худшем случае
равную O(n log n).
Плавная сортировка
Преимущество плавной сортировки в
том, что её сложность приближается к
O(n), если входные данные частично
отсортированы, в то время как у
пирамидальной сортировки сложность
всегда одна, независимо от состояния
входных данных.
Плавная сортировка
Другие алгоритмы сортировки
Устойчивые
Слиянием - O(n log n).
Память O(n)
С помощью двоичного
дерева O(n log n). Память
O(n).
Подсчётом O(n+k).
Память O(n+k)
Блочная (корзинная
вставка) O(n) Память О(k)
Неустойчивые
•Сортировка Шелла
•Сортировка расчёской
•Пирамидальная
•Интроспективная
•Терпеливая
•Поразрядная
(цифровая)
•Глупая
•Блинная
Сводная таблица алгоритмов сортировки

More Related Content

PPT
PPTX
Framework laravel
PDF
Selenium webdriver interview questions and answers
PPTX
How native is React Native? | React Native vs Native App Development
PDF
Introduction to API
PDF
The State of DevSecOps
PPTX
Framework For Automation Testing Practice Sharing
PPTX
Selenium WebDriver
Framework laravel
Selenium webdriver interview questions and answers
How native is React Native? | React Native vs Native App Development
Introduction to API
The State of DevSecOps
Framework For Automation Testing Practice Sharing
Selenium WebDriver

What's hot (20)

PPTX
utPLSQL: Unit Testing for Oracle PL/SQL
PDF
Introducción a DevOps
PDF
Software Testing Tutorial For Beginners | Manual & Automation Testing | Selen...
PDF
RPA Consultant Certified in UiPath and Automation Anywhere
PPTX
Flex (fast lexical analyzer generator )
PPTX
Learning Svelte
PPTX
Introduction to Android and Android Studio
ODP
Angular 6 - The Complete Guide
PDF
Flutter Tutorial For Beginners | Edureka
PDF
Selenium Automation Testing Interview Questions And Answers
PPTX
Getting Started with Azure Artifacts
PPTX
Testing soap UI
PDF
Introduction to react native
PPT
QSpiders - Automation using Selenium
PPTX
Introduction to Selenium Web Driver
PPT
Software Design for Testability
PDF
Connecting Connect with Spring Boot
PPTX
introduction about REST API
PPTX
Cross browser testing
PDF
Test link jira soap integration
utPLSQL: Unit Testing for Oracle PL/SQL
Introducción a DevOps
Software Testing Tutorial For Beginners | Manual & Automation Testing | Selen...
RPA Consultant Certified in UiPath and Automation Anywhere
Flex (fast lexical analyzer generator )
Learning Svelte
Introduction to Android and Android Studio
Angular 6 - The Complete Guide
Flutter Tutorial For Beginners | Edureka
Selenium Automation Testing Interview Questions And Answers
Getting Started with Azure Artifacts
Testing soap UI
Introduction to react native
QSpiders - Automation using Selenium
Introduction to Selenium Web Driver
Software Design for Testability
Connecting Connect with Spring Boot
introduction about REST API
Cross browser testing
Test link jira soap integration
Ad

Viewers also liked (20)

PPT
Java. Инкапсуляция.
PPT
Java. Строки. Класс String.
PPT
Java. Методы
PPT
Java. Циклы.
PPT
Java. Массивы. Многомерные массивы.
PPT
Java. Интерфейс Map - ассоциативные массивы.
PPT
Java. Интерфейс Reference - типы ссылок
PPT
Java. Полиморфизм.
PPT
Java. Конструкторы класса и инициализация
PPT
Java. Переменные, типы данных, операторы
PPT
Java. Интерфейс Set - наборы (множества) и его реализации.
PPT
Java. Введение в коллекции. Классы обертки. Перечисленияю
PPT
Java. Вложенные классы и интерфейсы.
PPT
Java. Сборщик мусора. Работа с памятью.
PPT
Java. Наследование.
PPT
Исключения и ошибки
PPT
Java. Интерфейс Queue - очередь
PPT
Java. Generic - шаблонные типы.
PPT
Java. Логические операторы, операторы ветвления.
Java. Инкапсуляция.
Java. Строки. Класс String.
Java. Методы
Java. Циклы.
Java. Массивы. Многомерные массивы.
Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Reference - типы ссылок
Java. Полиморфизм.
Java. Конструкторы класса и инициализация
Java. Переменные, типы данных, операторы
Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Вложенные классы и интерфейсы.
Java. Сборщик мусора. Работа с памятью.
Java. Наследование.
Исключения и ошибки
Java. Интерфейс Queue - очередь
Java. Generic - шаблонные типы.
Java. Логические операторы, операторы ветвления.
Ad

Similar to Алгоритмы поиска и сортировки (20)

PPTX
1332519 (1).pptx
PPT
PPT
Лекция 2 Сортировки, поиск и порядковые статистики
PDF
Лекция 2. Алгоритмы сортировки
PDF
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
PDF
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
PPT
02 сортировка и поиск
PDF
Алгоритмы и структуры данных весна 2014 лекция 3
PPTX
PDF
Алгоритмы и структуры данных осень 2013 лекция 3
PDF
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
PDF
Лекция 1: Введение в алгоритмы
PPTX
АиСД осень 2012 лекция 9
PPTX
презинтация по предмету основам программирования алгоритм сортировки слиянием
PDF
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
DOCX
прак 15.docx
DOCX
пр 15.docx
PPTX
Алгоритмы и структуры данных весна 2014 лекция 1
PDF
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
PDF
Лекция 1: Введение в алгоритмы
1332519 (1).pptx
Лекция 2 Сортировки, поиск и порядковые статистики
Лекция 2. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
02 сортировка и поиск
Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
Лекция 1: Введение в алгоритмы
АиСД осень 2012 лекция 9
презинтация по предмету основам программирования алгоритм сортировки слиянием
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
прак 15.docx
пр 15.docx
Алгоритмы и структуры данных весна 2014 лекция 1
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
Лекция 1: Введение в алгоритмы

More from Unguryan Vitaliy (20)

PPT
Модульное тестирование.
PPT
Stream API
PPT
Архитектурный шаблон MVC
PPT
Работа в команде, управление программными проектами
PPT
Системы контроля версий
PPT
Принципы SOLID
PPT
Парадигма объектно-ориентированного программирования.
PPT
Введение в язык программирования «Java»
PDF
Шаблоны проектирования GoF
PPT
Ввведение в java
PPT
Введение в hibernate
PPT
Spring AOP
PPT
Введение в Spring
PPT
Cookies, session и другое в JSP
PPT
Сервлеты
PPT
Сетевое взаимодействие
PPT
Введение в сетевые технологии
Модульное тестирование.
Stream API
Архитектурный шаблон MVC
Работа в команде, управление программными проектами
Системы контроля версий
Принципы SOLID
Парадигма объектно-ориентированного программирования.
Введение в язык программирования «Java»
Шаблоны проектирования GoF
Ввведение в java
Введение в hibernate
Spring AOP
Введение в Spring
Cookies, session и другое в JSP
Сервлеты
Сетевое взаимодействие
Введение в сетевые технологии

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