🗊Презентация Методы программирования. Алгоритмы сортировки. (Лекция 1)

Нажмите для полного просмотра!
Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №1Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №2Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №3Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №4Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №5Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №6Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №7Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №8Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №9Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №10Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №11Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №12Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №13Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №14Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №15Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №16Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №17Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №18Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №19Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №20Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №21Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №22Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №23Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №24Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №25Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №26Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №27Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №28Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №29Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №30Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №31Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №32Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №33Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №34Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №35Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №36Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №37Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №38Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №39Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №40Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №41Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №42Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №43Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №44Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №45Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №46Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №47Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №48Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №49Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №50

Содержание

Вы можете ознакомиться и скачать презентацию на тему Методы программирования. Алгоритмы сортировки. (Лекция 1). Доклад-сообщение содержит 50 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Алгоритмы сортировки
Лекция 1
Описание слайда:
Алгоритмы сортировки Лекция 1

Слайд 2





Сортировка – это процесс упорядочения некоторого множества элементов, на котором определены отношения порядка >, <, ≥, ≤, =. Когда говорят о сортировке, подразумевают упорядочение множества элементов по возрастанию или убыванию. 
Сортировка – это процесс упорядочения некоторого множества элементов, на котором определены отношения порядка >, <, ≥, ≤, =. Когда говорят о сортировке, подразумевают упорядочение множества элементов по возрастанию или убыванию. 
Традиционно различают внутреннюю сортировку, в которой предполагается, что данные находятся в оперативной памяти, и важно оптимизировать число действий программы (для методов, основанных на сравнении, число сравнений, обменов элементов и пр.), и внешнюю, в которой данные хранятся на внешнем устройстве и, прежде всего, надо снизить число обращений к этому устройству.
Описание слайда:
Сортировка – это процесс упорядочения некоторого множества элементов, на котором определены отношения порядка >, <, ≥, ≤, =. Когда говорят о сортировке, подразумевают упорядочение множества элементов по возрастанию или убыванию. Сортировка – это процесс упорядочения некоторого множества элементов, на котором определены отношения порядка >, <, ≥, ≤, =. Когда говорят о сортировке, подразумевают упорядочение множества элементов по возрастанию или убыванию. Традиционно различают внутреннюю сортировку, в которой предполагается, что данные находятся в оперативной памяти, и важно оптимизировать число действий программы (для методов, основанных на сравнении, число сравнений, обменов элементов и пр.), и внешнюю, в которой данные хранятся на внешнем устройстве и, прежде всего, надо снизить число обращений к этому устройству.

Слайд 3





Оценка алгоритма сортировки
Оценка алгоритма сортировки
Алгоритмы сортировки ведут себя по‑разному в различных обстоятельствах. Например, пузырьковая сортировка опережает быструю сортировку по скорости работы, если сортируемые элементы уже были почти упорядочены, но работает медленнее, если элементы были расположены хаотично.
Алгоритмы сортировки оцениваются по скорости выполнения и эффективности использования памяти.
Время — основной параметр, характеризующий быстродействие алгоритма. Называется также вычислительной сложностью. Для упорядочения важны худшее, среднее и лучшее поведение алгоритма в терминах мощности входного множества A. Если на вход алгоритму подаётся множество A, то обозначим n = | A | . Для типичного алгоритма хорошее поведение — это O(n log n), и плохое поведение — это O(n^2). Идеальное поведение для упорядочения — O(n). 
Алгоритмы сортировки, использующие только абстрактную операцию сравнения ключей, всегда нуждаются по меньшей мере в O(n log n)  сравнениях.
Описание слайда:
Оценка алгоритма сортировки Оценка алгоритма сортировки Алгоритмы сортировки ведут себя по‑разному в различных обстоятельствах. Например, пузырьковая сортировка опережает быструю сортировку по скорости работы, если сортируемые элементы уже были почти упорядочены, но работает медленнее, если элементы были расположены хаотично. Алгоритмы сортировки оцениваются по скорости выполнения и эффективности использования памяти. Время — основной параметр, характеризующий быстродействие алгоритма. Называется также вычислительной сложностью. Для упорядочения важны худшее, среднее и лучшее поведение алгоритма в терминах мощности входного множества A. Если на вход алгоритму подаётся множество A, то обозначим n = | A | . Для типичного алгоритма хорошее поведение — это O(n log n), и плохое поведение — это O(n^2). Идеальное поведение для упорядочения — O(n). Алгоритмы сортировки, использующие только абстрактную операцию сравнения ключей, всегда нуждаются по меньшей мере в O(n log n) сравнениях.

Слайд 4





Память – второй параметр, характеризующий эффективность алгоритма. Ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. Как правило, эти алгоритмы требуют  O(log n)  памяти. Алгоритмы сортировки, не потребляющие дополнительной памяти, относят к сортировкам на месте.
Память – второй параметр, характеризующий эффективность алгоритма. Ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. Как правило, эти алгоритмы требуют  O(log n)  памяти. Алгоритмы сортировки, не потребляющие дополнительной памяти, относят к сортировкам на месте.
Классификация алгоритмов сортировки
Устойчивость (stability) — устойчивая сортировка не меняет взаимного расположения равных элементов.
Естественность поведения — эффективность метода при обработке уже упорядоченных, или частично упорядоченных данных. Алгоритм ведёт себя естественно, если учитывает эту характеристику входной последовательности и работает лучше.
Использование операции сравнения. Алгоритмы, использующие для сортировки сравнение элементов между собой, называются основанными на сравнениях. Минимальная трудоемкость худшего случая для этих алгоритмов составляет O(n log n), но они отличаются гибкостью применения. Для специальных случаев (типов данных) существуют более эффективные алгоритмы.
Описание слайда:
Память – второй параметр, характеризующий эффективность алгоритма. Ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. Как правило, эти алгоритмы требуют O(log n) памяти. Алгоритмы сортировки, не потребляющие дополнительной памяти, относят к сортировкам на месте. Память – второй параметр, характеризующий эффективность алгоритма. Ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. Как правило, эти алгоритмы требуют O(log n) памяти. Алгоритмы сортировки, не потребляющие дополнительной памяти, относят к сортировкам на месте. Классификация алгоритмов сортировки Устойчивость (stability) — устойчивая сортировка не меняет взаимного расположения равных элементов. Естественность поведения — эффективность метода при обработке уже упорядоченных, или частично упорядоченных данных. Алгоритм ведёт себя естественно, если учитывает эту характеристику входной последовательности и работает лучше. Использование операции сравнения. Алгоритмы, использующие для сортировки сравнение элементов между собой, называются основанными на сравнениях. Минимальная трудоемкость худшего случая для этих алгоритмов составляет O(n log n), но они отличаются гибкостью применения. Для специальных случаев (типов данных) существуют более эффективные алгоритмы.

Слайд 5





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

Слайд 6





Объединение и сжатие ключей
Объединение и сжатие ключей
Иногда можно хранить ключи списка в комбинированной или сжатой форме. 
Например, можно объединять (combine) в программе два поля, соответствующих имени и фамилии, в одни ключ. Это позволит упростить и ускорить сравнение. 
Иногда можно сжимать (compress) ключи. Сжатые ключи занимают меньше места, уменьшая размер таблиц индексов. Это позволяет сортировать списки большего размера без перерасхода памяти, быстрее перемещать элементы в списке. 
Один из методов сжатия строк — кодирование их целыми числами или данными другого числового формата. Числовые данные занимают меньше места, чем строки и сравнение двух численных значений также происходит намного быстрее, чем сравнение двух строк. Конечно, строковые операции неприменимы для строк, представленных числами.
Описание слайда:
Объединение и сжатие ключей Объединение и сжатие ключей Иногда можно хранить ключи списка в комбинированной или сжатой форме. Например, можно объединять (combine) в программе два поля, соответствующих имени и фамилии, в одни ключ. Это позволит упростить и ускорить сравнение. Иногда можно сжимать (compress) ключи. Сжатые ключи занимают меньше места, уменьшая размер таблиц индексов. Это позволяет сортировать списки большего размера без перерасхода памяти, быстрее перемещать элементы в списке. Один из методов сжатия строк — кодирование их целыми числами или данными другого числового формата. Числовые данные занимают меньше места, чем строки и сравнение двух численных значений также происходит намного быстрее, чем сравнение двух строк. Конечно, строковые операции неприменимы для строк, представленных числами.

Слайд 7





Например, требуется закодировать строки, состоящие из заглавных латинских букв. Можно считать, что каждый символ — это число по основанию 27. Необходимо использовать основание 27, чтобы представить 26 латинских букв и еще одну цифру для обозначения конца слова (пусть сравниваются слова одинаковой длины). 
Например, требуется закодировать строки, состоящие из заглавных латинских букв. Можно считать, что каждый символ — это число по основанию 27. Необходимо использовать основание 27, чтобы представить 26 латинских букв и еще одну цифру для обозначения конца слова (пусть сравниваются слова одинаковой длины). 
Код по основанию 27 для строки из трех символов дает формула
 27^2 * (первая буква - A + 1) + 27 * (вторая буква - A + 1) + (третья буква - A + 1). 
Если в строке меньше трех символов, вместо значения (третья буква - A + 1) подставляется 0. Например, строка FOX кодируется так:
27^2 * (F - A + 1) + 27 * (O - A + 1) + (X - A +1) = 4803
Строка NO кодируется следующим образом:
27^2 * (N - A + 1) + 27 * (O - A + 1) + (0) = 10611
Заметим, что 10611 больше 4803, поскольку NO > FOX.
Две следующие процедуры конвертируют строки в числа формата double и обратно и используют константы: 
Const STRING_BASE = 27;
ASC_A = 65 ; // ASCII код для символа "A".
Описание слайда:
Например, требуется закодировать строки, состоящие из заглавных латинских букв. Можно считать, что каждый символ — это число по основанию 27. Необходимо использовать основание 27, чтобы представить 26 латинских букв и еще одну цифру для обозначения конца слова (пусть сравниваются слова одинаковой длины). Например, требуется закодировать строки, состоящие из заглавных латинских букв. Можно считать, что каждый символ — это число по основанию 27. Необходимо использовать основание 27, чтобы представить 26 латинских букв и еще одну цифру для обозначения конца слова (пусть сравниваются слова одинаковой длины). Код по основанию 27 для строки из трех символов дает формула 27^2 * (первая буква - A + 1) + 27 * (вторая буква - A + 1) + (третья буква - A + 1). Если в строке меньше трех символов, вместо значения (третья буква - A + 1) подставляется 0. Например, строка FOX кодируется так: 27^2 * (F - A + 1) + 27 * (O - A + 1) + (X - A +1) = 4803 Строка NO кодируется следующим образом: 27^2 * (N - A + 1) + 27 * (O - A + 1) + (0) = 10611 Заметим, что 10611 больше 4803, поскольку NO > FOX. Две следующие процедуры конвертируют строки в числа формата double и обратно и используют константы: Const STRING_BASE = 27; ASC_A = 65 ; // ASCII код для символа "A".

Слайд 8


Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №8
Описание слайда:

Слайд 9


Методы программирования. Алгоритмы сортировки. (Лекция 1), слайд №9
Описание слайда:

Слайд 10





1.а Сортировка выбором
Сортировка выбором (selection sort) — простой алгоритм сортировки, относящийся к неустойчивым алгоритмам сортировки. На массиве из n элементов имеет время выполнения в худшем, среднем и лучшем случае O(n^2), (предполагается, что сравнения осуществляются за постоянное время). 
Идея состоит в поиске наименьшего (наибольшего) элемента в списке, который затем меняется местами с элементом в начале (в конце) списка. Далее находится наименьший (наибольший ) элемент из оставшихся, и меняется местами со вторым элементом (предпоследним). Процесс продолжается до тех пор, пока все элементы не займут свое конечное положение.
Усовершенствование алгоритма
Существует также двунаправленный вариант сортировки методом выбора, в котором на каждом проходе отыскиваются и устанавливаются на свои места и минимальное, и максимальное значения.
Описание слайда:
1.а Сортировка выбором Сортировка выбором (selection sort) — простой алгоритм сортировки, относящийся к неустойчивым алгоритмам сортировки. На массиве из n элементов имеет время выполнения в худшем, среднем и лучшем случае O(n^2), (предполагается, что сравнения осуществляются за постоянное время). Идея состоит в поиске наименьшего (наибольшего) элемента в списке, который затем меняется местами с элементом в начале (в конце) списка. Далее находится наименьший (наибольший ) элемент из оставшихся, и меняется местами со вторым элементом (предпоследним). Процесс продолжается до тех пор, пока все элементы не займут свое конечное положение. Усовершенствование алгоритма Существует также двунаправленный вариант сортировки методом выбора, в котором на каждом проходе отыскиваются и устанавливаются на свои места и минимальное, и максимальное значения.

Слайд 11





1.б Сортировка выбором
Вычислительная сложность алгоритма
При поиске i-го наименьшего элемента, алгоритму приходится перебрать N-i элементов, которые еще не заняли свое конечное положение. Время выполнения алгоритма пропорционально N + (N - 1) + (N - 2) + … + 1=(N+1)*N/2, или порядка O(N^2).
Особенности алгоритма
Сортировка выбором неплохо работает со списками, элементы в которых расположены случайно или в прямом порядке, но несколько хуже, если список изначально отсортирован в обратном порядке. 
Алгоритм чрезвычайно прост. Это не только облегчает его разработку и отладку, 
но и делает сортировку выбором достаточно быстрой для задач небольшой размерности.
Описание слайда:
1.б Сортировка выбором Вычислительная сложность алгоритма При поиске i-го наименьшего элемента, алгоритму приходится перебрать N-i элементов, которые еще не заняли свое конечное положение. Время выполнения алгоритма пропорционально N + (N - 1) + (N - 2) + … + 1=(N+1)*N/2, или порядка O(N^2). Особенности алгоритма Сортировка выбором неплохо работает со списками, элементы в которых расположены случайно или в прямом порядке, но несколько хуже, если список изначально отсортирован в обратном порядке. Алгоритм чрезвычайно прост. Это не только облегчает его разработку и отладку, но и делает сортировку выбором достаточно быстрой для задач небольшой размерности.

Слайд 12





1.в Сортировка выбором
Пример упорядочения по возрастанию
Описание слайда:
1.в Сортировка выбором Пример упорядочения по возрастанию

Слайд 13





1.г Сортировка выбором
Описание слайда:
1.г Сортировка выбором

Слайд 14





1.д Сортировка выбором
Описание слайда:
1.д Сортировка выбором

Слайд 15





2.а Сортировка вставкой
Сортировка вставкой (insertion sort) — алгоритм со сложностью порядка O(N^2). 
Особенности алгоритма
прост в реализации;
эффективен на небольших наборах данных, на наборах данных до десятков элементов может оказаться лучшим;
эффективен на наборах данных, которые уже частично отсортированы;
устойчивый алгоритм сортировки (не меняет порядок элементов, которые уже отсортированы);
может сортировать список по мере его получения;
не требует временной памяти, даже под стек.
Описание слайда:
2.а Сортировка вставкой Сортировка вставкой (insertion sort) — алгоритм со сложностью порядка O(N^2). Особенности алгоритма прост в реализации; эффективен на небольших наборах данных, на наборах данных до десятков элементов может оказаться лучшим; эффективен на наборах данных, которые уже частично отсортированы; устойчивый алгоритм сортировки (не меняет порядок элементов, которые уже отсортированы); может сортировать список по мере его получения; не требует временной памяти, даже под стек.

Слайд 16





2.б Сортировка вставкой
Алгоритм
На каждом шаге алгоритма
выбираем один из элементов входных данных и 
вставляем его на нужную позицию в уже отсортированном списке, 
до тех пор, пока набор входных данных не будет исчерпан. 
Метод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора. Обычно (и с целью получения устойчивого алгоритма сортировки), элементы вставляются по порядку их появления во входном массиве.
Описание слайда:
2.б Сортировка вставкой Алгоритм На каждом шаге алгоритма выбираем один из элементов входных данных и вставляем его на нужную позицию в уже отсортированном списке, до тех пор, пока набор входных данных не будет исчерпан. Метод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора. Обычно (и с целью получения устойчивого алгоритма сортировки), элементы вставляются по порядку их появления во входном массиве.

Слайд 17





2.в Сортировка вставкой
Пример
Описание слайда:
2.в Сортировка вставкой Пример

Слайд 18





2.г Сортировка вставкой
Полное число шагов, которые потребуется выполнить, составляет 1 + 2 + 3 + … + (N - 1), то есть O(N^2). Фактически, этот алгоритм не слишком быстр даже в сравнении с другими алгоритмами порядка O(N^2), такими как сортировка выбором.
Достаточно много времени тратится на поиск правильного положения для нового элемента. 
Усовершенствование алгоритма
Применение эффективного алгоритма поиска (в уже отсортированной части массива!) намного ускоряет выполнение алгоритма сортировки вставкой.
Описание слайда:
2.г Сортировка вставкой Полное число шагов, которые потребуется выполнить, составляет 1 + 2 + 3 + … + (N - 1), то есть O(N^2). Фактически, этот алгоритм не слишком быстр даже в сравнении с другими алгоритмами порядка O(N^2), такими как сортировка выбором. Достаточно много времени тратится на поиск правильного положения для нового элемента. Усовершенствование алгоритма Применение эффективного алгоритма поиска (в уже отсортированной части массива!) намного ускоряет выполнение алгоритма сортировки вставкой.

Слайд 19





2.д Сортировка вставкой
Описание слайда:
2.д Сортировка вставкой

Слайд 20





2.е Сортировка вставкой
Описание слайда:
2.е Сортировка вставкой

Слайд 21





2.ж Сортировка вставкой
Вставка в связных списках
Можно использовать вариант сортировки вставкой для упорядочения элементов не в массиве, а в связном списке. Алгоритм ищет требуемое положение элемента в возрастающем связном списке, и затем помещает туда новый элемент, используя операции работы со связными списками.
Наилучший случай для этого алгоритма достигается, когда исходный список первоначально отсортирован в обратном порядке. В этом случае каждый последующий элемент меньше, чем предыдущий, поэтому алгоритм помещает его в начало отсортированного списка. При этом требуется выполнить только одну операцию сравнения элементов, и в наилучшем случае время выполнения алгоритма будет порядка O(N).
Описание слайда:
2.ж Сортировка вставкой Вставка в связных списках Можно использовать вариант сортировки вставкой для упорядочения элементов не в массиве, а в связном списке. Алгоритм ищет требуемое положение элемента в возрастающем связном списке, и затем помещает туда новый элемент, используя операции работы со связными списками. Наилучший случай для этого алгоритма достигается, когда исходный список первоначально отсортирован в обратном порядке. В этом случае каждый последующий элемент меньше, чем предыдущий, поэтому алгоритм помещает его в начало отсортированного списка. При этом требуется выполнить только одну операцию сравнения элементов, и в наилучшем случае время выполнения алгоритма будет порядка O(N).

Слайд 22





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

Слайд 23





3.а Сортировка пузырьком
Сортировка простыми обменами, сортировка пузырьком (bubble sort) — простой алгоритм сортировки. Для понимания и реализации этот алгоритм — простейший, но эффективен он лишь для небольших массивов. Сложность алгоритма: O(n²).
Алгоритм
Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход
элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. 
Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. 
При проходе алгоритма от начала к концу массива, больший элемент, стоящий не на своём месте, «всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма. В противоположность «методу погружения» (методу простых вставок), в котором элементы погружаются на соответствующий уровень.
Описание слайда:
3.а Сортировка пузырьком Сортировка простыми обменами, сортировка пузырьком (bubble sort) — простой алгоритм сортировки. Для понимания и реализации этот алгоритм — простейший, но эффективен он лишь для небольших массивов. Сложность алгоритма: O(n²). Алгоритм Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При проходе алгоритма от начала к концу массива, больший элемент, стоящий не на своём месте, «всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма. В противоположность «методу погружения» (методу простых вставок), в котором элементы погружаются на соответствующий уровень.

Слайд 24





3.б Сортировка пузырьком
Пример. Сортировка пузырьком
Последовательность чисел представлена вертикально: первая запись – в самом низу, последняя – в самом верху.
Описание слайда:
3.б Сортировка пузырьком Пример. Сортировка пузырьком Последовательность чисел представлена вертикально: первая запись – в самом низу, последняя – в самом верху.

Слайд 25





3.в Сортировка пузырьком
Примеры. Массивы расположены вертикально. Первый элемент вверху, последний – внизу.
А) Проход от конца к началу.	 Б) Проход от начала к концу.
Описание слайда:
3.в Сортировка пузырьком Примеры. Массивы расположены вертикально. Первый элемент вверху, последний – внизу. А) Проход от конца к началу. Б) Проход от начала к концу.

Слайд 26





3.г Сортировка пузырьком
Усовершенствование  алгоритма
1.При просмотре массива сверху вниз (от конца к началу), элементы, которые перемещаются вверх (в противоположном направлении), сдвигаются всего на одну позицию. Элементы, которые перемещаются вниз, то есть в направлении прохода, сдвигаются на несколько позиций за один проход. Этот факт можно использовать для ускорения работы алгоритма. Если чередовать просмотр массива снизу вверх и сверху вниз, то перемещение элементов в прямом и обратном направлениях будет одинаково быстрым. 
Если M элементов списка расположены не на своих местах, алгоритму потребуется не более M проходов для того, чтобы расположить элементы по порядку. Если в списке N элементов, алгоритму потребуется N шагов для каждого прохода. Таким образом, полное время выполнения для этого алгоритма будет порядка O(M * N).
Описание слайда:
3.г Сортировка пузырьком Усовершенствование алгоритма 1.При просмотре массива сверху вниз (от конца к началу), элементы, которые перемещаются вверх (в противоположном направлении), сдвигаются всего на одну позицию. Элементы, которые перемещаются вниз, то есть в направлении прохода, сдвигаются на несколько позиций за один проход. Этот факт можно использовать для ускорения работы алгоритма. Если чередовать просмотр массива снизу вверх и сверху вниз, то перемещение элементов в прямом и обратном направлениях будет одинаково быстрым. Если M элементов списка расположены не на своих местах, алгоритму потребуется не более M проходов для того, чтобы расположить элементы по порядку. Если в списке N элементов, алгоритму потребуется N шагов для каждого прохода. Таким образом, полное время выполнения для этого алгоритма будет порядка O(M * N).

Слайд 27





3.д Сортировка пузырьком
Усовершенствование  алгоритма
2.Вместо выполнения нескольких отдельных перестановок, можно сохранить перемещаемое значение во временной переменной до тех пор, пока не будет найдено конечное положение элемента. Это может сэкономить большое число шагов алгоритма, если элементы перемещаются на большие расстояния внутри массива.
3.Ограничение проходов массива. После просмотра массива, последние переставленные элементы ограничивают часть массива, которая содержит неупорядоченные элементы. При проходе, например, наибольший элемент перемещается в конечное положение. Поскольку нет больших элементов, которые нужно было бы поместить за ним, то можно начать очередной проход сверху вниз с этой точки и на ней же заканчивать следующие проходы снизу вверх.
Описание слайда:
3.д Сортировка пузырьком Усовершенствование алгоритма 2.Вместо выполнения нескольких отдельных перестановок, можно сохранить перемещаемое значение во временной переменной до тех пор, пока не будет найдено конечное положение элемента. Это может сэкономить большое число шагов алгоритма, если элементы перемещаются на большие расстояния внутри массива. 3.Ограничение проходов массива. После просмотра массива, последние переставленные элементы ограничивают часть массива, которая содержит неупорядоченные элементы. При проходе, например, наибольший элемент перемещается в конечное положение. Поскольку нет больших элементов, которые нужно было бы поместить за ним, то можно начать очередной проход сверху вниз с этой точки и на ней же заканчивать следующие проходы снизу вверх.

Слайд 28





3.е Шейкерная сортировка
Сортировка перемешиванием (Шейкерная сортировка) (Cocktail sort) — разновидность пузырьковой сортировки. Анализируя метод пузырьковой сортировки можно отметить два обстоятельства.
Во-первых, если при движении по части массива перестановки не происходят, то эта часть массива уже отсортирована и, следовательно, ее можно исключить из рассмотрения.
Во-вторых, при движении от конца массива к началу минимальный элемент “всплывает” на первую позицию, а максимальный элемент сдвигается только на одну позицию вправо.
Эти две идеи приводят к следующим  модификациям в методе пузырьковой сортировки. 
Границы рабочей части массива (т.е. части массива, где происходит движение) устанавливаются в месте последнего обмена на каждой итерации. 
Массив просматривается поочередно справа налево и слева направо.
Хранение перемещаемого значения в буфере памяти.
Лучший случай для этой сортировки — отсортированный массив (О(n)), худший — отсортированный в обратном порядке (O(n²)).
Описание слайда:
3.е Шейкерная сортировка Сортировка перемешиванием (Шейкерная сортировка) (Cocktail sort) — разновидность пузырьковой сортировки. Анализируя метод пузырьковой сортировки можно отметить два обстоятельства. Во-первых, если при движении по части массива перестановки не происходят, то эта часть массива уже отсортирована и, следовательно, ее можно исключить из рассмотрения. Во-вторых, при движении от конца массива к началу минимальный элемент “всплывает” на первую позицию, а максимальный элемент сдвигается только на одну позицию вправо. Эти две идеи приводят к следующим модификациям в методе пузырьковой сортировки. Границы рабочей части массива (т.е. части массива, где происходит движение) устанавливаются в месте последнего обмена на каждой итерации. Массив просматривается поочередно справа налево и слева направо. Хранение перемещаемого значения в буфере памяти. Лучший случай для этой сортировки — отсортированный массив (О(n)), худший — отсортированный в обратном порядке (O(n²)).

Слайд 29





3.ж Шейкерная сортировка
Пример. Шейкерная сортировка
Описание слайда:
3.ж Шейкерная сортировка Пример. Шейкерная сортировка

Слайд 30





3.з Шейкерная сортировка
procedure TForm1.Bubblesort(list1: PlongIntarray; min, max: longint);
var
    i,j,tmp,last_swap: longint;
begin
  while min<max do
  begin     //погружение
    last_swap:= min-1;
    i:=min+1;
    while i<=max do
    begin       //нахождение пузырька
      if list1[i-1] > list1[i]then
Описание слайда:
3.з Шейкерная сортировка procedure TForm1.Bubblesort(list1: PlongIntarray; min, max: longint); var i,j,tmp,last_swap: longint; begin while min<max do begin //погружение last_swap:= min-1; i:=min+1; while i<=max do begin //нахождение пузырька if list1[i-1] > list1[i]then

Слайд 31





3.и Шейкерная сортировка
  begin
        //куда сдвинуть пузырек
        tmp:=  list1[i-1];
        j:=i;
        repeat
          list1[j-1]:=list1[j] ;
          //memo2.Lines.Add('погружение') ;
          //Btnwritememo.Click;
          j:=j+1;
          if j>max then break;
        until list1[j]>tmp;
        list1[j-1]:=tmp;
        //memo2.Lines.Add('погружение') ;
        //Btnwritememo.Click;
        last_swap:=j-1;
        i:=j+1;
      end else
        i:=i+1;
    end;   //конец погружения
Описание слайда:
3.и Шейкерная сортировка begin //куда сдвинуть пузырек tmp:= list1[i-1]; j:=i; repeat list1[j-1]:=list1[j] ; //memo2.Lines.Add('погружение') ; //Btnwritememo.Click; j:=j+1; if j>max then break; until list1[j]>tmp; list1[j-1]:=tmp; //memo2.Lines.Add('погружение') ; //Btnwritememo.Click; last_swap:=j-1; i:=j+1; end else i:=i+1; end; //конец погружения

Слайд 32





3.к Шейкерная сортировка
   //обновление max
    max:= last_swap-1;
    //всплытие
    last_swap:= max+1;
    i:=max-1;
    while i>=min do
    begin       //нахождение пузырька
      if list1[i+1] < list1[i]then
      begin         //куда сдвинуть пузырек
        tmp:=  list1[i+1];
        j:=i;
        repeat
          list1[j+1]:=list1[j] ;
          j:=j-1;
          if j<min then break;
        until list1[j]<tmp;
Описание слайда:
3.к Шейкерная сортировка //обновление max max:= last_swap-1; //всплытие last_swap:= max+1; i:=max-1; while i>=min do begin //нахождение пузырька if list1[i+1] < list1[i]then begin //куда сдвинуть пузырек tmp:= list1[i+1]; j:=i; repeat list1[j+1]:=list1[j] ; j:=j-1; if j<min then break; until list1[j]<tmp;

Слайд 33





3.л Шейкерная сортировка
    list1[j+1]:=tmp;
        last_swap:=j+1;
        i:=j-1;
      end else
        i:=i-1;
    end;  //конец всплытия
    //обновление min
    min:=last_swap+1;
  end;
end;
Описание слайда:
3.л Шейкерная сортировка list1[j+1]:=tmp; last_swap:=j+1; i:=j-1; end else i:=i-1; end; //конец всплытия //обновление min min:=last_swap+1; end; end;

Слайд 34





4.а Быстрая сортировка
Быстрая сортировка — рекурсивный алгоритм, который использует подход «разделяй и властвуй». Если сортируемый список больше, чем минимальный заданный размер, процедура быстрой сортировки разбивает его на два подсписка, а затем рекурсивно вызывает себя для сортировки двух подсписков.
Версия алгоритма быстрой сортировки 
Если алгоритм вызывается для подсписка, содержащего не более одного элемента, то подсписок уже отсортирован, и подпрограмма завершает работу.
Иначе, процедура выбирает какой‑либо элемент из списка и использует его для разбиения списка на два подсписка. Помещает элементы, которые меньше, чем выбранный элемент, в первый подсписок, а остальные — во второй, и затем рекурсивно вызывает себя для сортировки двух подсписков.
Описание слайда:
4.а Быстрая сортировка Быстрая сортировка — рекурсивный алгоритм, который использует подход «разделяй и властвуй». Если сортируемый список больше, чем минимальный заданный размер, процедура быстрой сортировки разбивает его на два подсписка, а затем рекурсивно вызывает себя для сортировки двух подсписков. Версия алгоритма быстрой сортировки Если алгоритм вызывается для подсписка, содержащего не более одного элемента, то подсписок уже отсортирован, и подпрограмма завершает работу. Иначе, процедура выбирает какой‑либо элемент из списка и использует его для разбиения списка на два подсписка. Помещает элементы, которые меньше, чем выбранный элемент, в первый подсписок, а остальные — во второй, и затем рекурсивно вызывает себя для сортировки двух подсписков.

Слайд 35





4.б Быстрая сортировка
Пример. Быстрая сортировка
Предполагается, что первый элемент принадлежит первому подсписку. После разделения на 2 подсписка последний элемент первого подсписка и его первый элемент меняются местами.
Описание слайда:
4.б Быстрая сортировка Пример. Быстрая сортировка Предполагается, что первый элемент принадлежит первому подсписку. После разделения на 2 подсписка последний элемент первого подсписка и его первый элемент меняются местами.

Слайд 36





4.в Быстрая сортировка
Особенности версии алгоритма
1.Среднее значение для деления списка не входит ни в один подсписок. Это означает, что в двух подсписках содержится на один элемент меньше, чем в исходном списке. Т.к. число рассматриваемых элементов уменьшается, то в конечном итоге алгоритм завершит работу.
2.В качестве разделителя используется первый элемент в списке.
Описание слайда:
4.в Быстрая сортировка Особенности версии алгоритма 1.Среднее значение для деления списка не входит ни в один подсписок. Это означает, что в двух подсписках содержится на один элемент меньше, чем в исходном списке. Т.к. число рассматриваемых элементов уменьшается, то в конечном итоге алгоритм завершит работу. 2.В качестве разделителя используется первый элемент в списке.

Слайд 37





4.г Быстрая сортировка
Способы выбора разделительного элемента 
1.Можно использовать элемент из середины списка. Но он может оказаться наименьшим или наибольшим элементом списка. При этом один подсписок будет намного больше, чем другой, что приведет к снижению производительности до порядка O(N^2) и глубокому уровню рекурсии.
2.Просмотреть весь список, вычислить среднее арифметическое всех значений, и использовать его в качестве разделительного значения. Дополнительный проход со сложностью порядка O(N) не изменит теоретическое время выполнения алгоритма, но снизит общую производительность.
3.Выбрать средний из элементов в начале, конце и середине списка. Потребуется выбрать всего три элемента. Гарантируется, что этот элемент не является наибольшим или наименьшим в списке, и вероятно окажется где‑то в середине списка.
4. Выбор среднего элемента из списка случайным образом.
Описание слайда:
4.г Быстрая сортировка Способы выбора разделительного элемента 1.Можно использовать элемент из середины списка. Но он может оказаться наименьшим или наибольшим элементом списка. При этом один подсписок будет намного больше, чем другой, что приведет к снижению производительности до порядка O(N^2) и глубокому уровню рекурсии. 2.Просмотреть весь список, вычислить среднее арифметическое всех значений, и использовать его в качестве разделительного значения. Дополнительный проход со сложностью порядка O(N) не изменит теоретическое время выполнения алгоритма, но снизит общую производительность. 3.Выбрать средний из элементов в начале, конце и середине списка. Потребуется выбрать всего три элемента. Гарантируется, что этот элемент не является наибольшим или наименьшим в списке, и вероятно окажется где‑то в середине списка. 4. Выбор среднего элемента из списка случайным образом.

Слайд 38





4.д Быстрая сортировка
Особенности алгоритма быстрой сортировки
Если данные имеют небольшой диапазон значений (много дубликатов нескольких значений), то алгоритм при каждом вызове будет помещать много идентичных значений в один список. Это приводит к большому уровню вложенности рекурсии.
Быстрая сортировка — не самый лучший выбор для сортировки небольших списков. Благодаря своей простоте, сортировка выбором быстрее при сортировке примерно десятка записей. 
Усовершенствование алгоритма
Можно улучшить производительность быстрой сортировки, если прекратить рекурсию до того, как подсписки уменьшатся до нуля, и использовать для завершения работы сортировку выбором.
Описание слайда:
4.д Быстрая сортировка Особенности алгоритма быстрой сортировки Если данные имеют небольшой диапазон значений (много дубликатов нескольких значений), то алгоритм при каждом вызове будет помещать много идентичных значений в один список. Это приводит к большому уровню вложенности рекурсии. Быстрая сортировка — не самый лучший выбор для сортировки небольших списков. Благодаря своей простоте, сортировка выбором быстрее при сортировке примерно десятка записей. Усовершенствование алгоритма Можно улучшить производительность быстрой сортировки, если прекратить рекурсию до того, как подсписки уменьшатся до нуля, и использовать для завершения работы сортировку выбором.

Слайд 39





4.е Быстрая сортировка
Быстрая сортировка (quicksort), сортировка Хоара, часто называемая qsort по имени реализации в стандартной библиотеке языков — широко известный алгоритм сортировки, разработанный английским информатиком Чарльзом Хоаром. Один из быстрых известных универсальных алгоритмов сортировки массивов (в среднем O(n log n) обменов при упорядочении n элементов), хотя и имеющий ряд недостатков.
Краткое описание алгоритма
выбрать элемент, называемый опорным.
сравнить все остальные элементы с опорным, на основании сравнения разбить множество на три — «меньшие опорного», «равные» и «большие», расположить их в порядке меньшие-равные-большие.
повторить рекурсивно для «меньших» и «больших».
Описание слайда:
4.е Быстрая сортировка Быстрая сортировка (quicksort), сортировка Хоара, часто называемая qsort по имени реализации в стандартной библиотеке языков — широко известный алгоритм сортировки, разработанный английским информатиком Чарльзом Хоаром. Один из быстрых известных универсальных алгоритмов сортировки массивов (в среднем O(n log n) обменов при упорядочении n элементов), хотя и имеющий ряд недостатков. Краткое описание алгоритма выбрать элемент, называемый опорным. сравнить все остальные элементы с опорным, на основании сравнения разбить множество на три — «меньшие опорного», «равные» и «большие», расположить их в порядке меньшие-равные-большие. повторить рекурсивно для «меньших» и «больших».

Слайд 40





4.ж Быстрая сортировка
Описание слайда:
4.ж Быстрая сортировка

Слайд 41





4.з Быстрая сортировка
Описание слайда:
4.з Быстрая сортировка

Слайд 42





4.и Быстрая сортировка
Описание слайда:
4.и Быстрая сортировка

Слайд 43





5.а Сортировка слиянием
Сортировка слиянием (merge sort) — алгоритм сортировки, который упорядочивает списки (или другие структуры данных, доступ к элементам которых можно получать только последовательно, например — потоки) в определённом порядке. Эта сортировка — хороший пример использования принципа «разделяй и властвуй». Сначала задача разбивается на несколько подзадач меньшего размера. Затем эти задачи решаются с помощью рекурсивного вызова или непосредственно, если их размер достаточно мал. Наконец, их решения комбинируются, и получается решение исходной задачи.
Для сортировки массива эти три этапа выглядят так:
Сортируемый массив разбивается на две части примерно одинакового размера;
Каждая из получившихся частей сортируется отдельно, например — тем же самым алгоритмом;
Два упорядоченных массива половинного размера соединяются в один.
Рекурсивное разбиение задачи на меньшие происходит до тех пор, пока размер массива не достигнет единицы (любой массив длины 1 можно считать упорядоченным).
Описание слайда:
5.а Сортировка слиянием Сортировка слиянием (merge sort) — алгоритм сортировки, который упорядочивает списки (или другие структуры данных, доступ к элементам которых можно получать только последовательно, например — потоки) в определённом порядке. Эта сортировка — хороший пример использования принципа «разделяй и властвуй». Сначала задача разбивается на несколько подзадач меньшего размера. Затем эти задачи решаются с помощью рекурсивного вызова или непосредственно, если их размер достаточно мал. Наконец, их решения комбинируются, и получается решение исходной задачи. Для сортировки массива эти три этапа выглядят так: Сортируемый массив разбивается на две части примерно одинакового размера; Каждая из получившихся частей сортируется отдельно, например — тем же самым алгоритмом; Два упорядоченных массива половинного размера соединяются в один. Рекурсивное разбиение задачи на меньшие происходит до тех пор, пока размер массива не достигнет единицы (любой массив длины 1 можно считать упорядоченным).

Слайд 44





5.б Сортировка слиянием
Пример. Слияние двух упорядоченных массивов
Описание слайда:
5.б Сортировка слиянием Пример. Слияние двух упорядоченных массивов

Слайд 45





5.в Сортировка слиянием
Пример
Описание слайда:
5.в Сортировка слиянием Пример

Слайд 46





5.г Сортировка слиянием
Пример
Описание слайда:
5.г Сортировка слиянием Пример

Слайд 47





5.д Сортировка слиянием
Этап слияния
 Подсписки сливаются во временный массив, и результат копируется в первоначальный список. Работа с временным массивом приводит к тому, что большая часть времени уходит на копирование элементов между массивами.
Усовершенствование алгоритма
Как и в случае с быстрой сортировкой, можно ускорить выполнение сортировки слиянием, остановив рекурсию, когда подсписки достигают определенного минимального размера. Затем можно использовать сортировку выбором для завершения работы.
Преимущества алгоритма сортировки слиянием 
Время работы алгоритма сортировки слиянием остается одним и тем же для различных представлений данных и начального распределения. Его можно использовать и в случае, когда в списке имеется много дублированных значений.
Поскольку сортировка слиянием (простого двухпутевого) делит список на равные части, она никогда не входит в глубокую рекурсию. Для списка из N элементов сортировка слиянием достигает глубины рекурсии всего O(log n). 
Время работы алгоритма сортировки слиянием порядка O(n * log n) (быстрая сортировка тоже алгоритм порядка O(n * log n), но только для лучшего случая). Расход памяти выше, чем для быстрой сортировки.
Описание слайда:
5.д Сортировка слиянием Этап слияния Подсписки сливаются во временный массив, и результат копируется в первоначальный список. Работа с временным массивом приводит к тому, что большая часть времени уходит на копирование элементов между массивами. Усовершенствование алгоритма Как и в случае с быстрой сортировкой, можно ускорить выполнение сортировки слиянием, остановив рекурсию, когда подсписки достигают определенного минимального размера. Затем можно использовать сортировку выбором для завершения работы. Преимущества алгоритма сортировки слиянием Время работы алгоритма сортировки слиянием остается одним и тем же для различных представлений данных и начального распределения. Его можно использовать и в случае, когда в списке имеется много дублированных значений. Поскольку сортировка слиянием (простого двухпутевого) делит список на равные части, она никогда не входит в глубокую рекурсию. Для списка из N элементов сортировка слиянием достигает глубины рекурсии всего O(log n). Время работы алгоритма сортировки слиянием порядка O(n * log n) (быстрая сортировка тоже алгоритм порядка O(n * log n), но только для лучшего случая). Расход памяти выше, чем для быстрой сортировки.

Слайд 48





5.е Сортировка слиянием
Описание слайда:
5.е Сортировка слиянием

Слайд 49





5.ж Сортировка слиянием
Описание слайда:
5.ж Сортировка слиянием

Слайд 50





5.з Сортировка слиянием
Описание слайда:
5.з Сортировка слиянием



Похожие презентации
Mypresentation.ru
Загрузить презентацию