ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.01.2024
Просмотров: 86
Скачиваний: 1
СОДЕРЖАНИЕ
Количество обменов в худшем случае = ?
Количество сравнений = n(n-1)/2
Количество обменов в худшем случае = n
Количество сдвигаемых элементов = ?
Количество сравнений за 1 проход = log2k
Количество сдвигаемых элементов = k
Общее количество сдвигов = ∑ k = n(n-1)/2
Общее количество операций сравнения = log21+log22+log23+…+log2(n-1) ≤ n log2n
Количество сравнений за 1 проход = k
Общее количество обменов = n(n-1)/2
Общее количество операций сравнения = n(n-1)/2
Всего выполняется log2n шагов.
На каждом шаге – n операций сравнения.
Пример. Структура «куча» Хранение в массиве
Количество сравнений во время 1 прохода ≤ ?
Количество проходов (перестроений) = ?
Количество сравнений во время 1 перестроения ≤ ?
Количество сравнений во время 1 прохода ≤ log2n
Количество проходов (перестроений) = n-1
Количество сравнений во время 1 перестроения ≤ log2n
Алгоритм перераспределения элементов:
? Достоинства и недостатки алгоритма определить самостоятельно.
Опр. Карманами будем называть m стеков, занумерованных числами 0,…,m-1.
На i-той (i=1,…,k) фазе выполняются действия:
После k-ой фазы массив будет полностью отсортирован.
Количество операций во время каждой фазы = ?
? При каком наборе чисел алгоритм наиболее эффективен?
? При каком наборе чисел эффективность алгоритма минимальна?
Количество операций во время каждой фазы = n
Алгоритм эффективен, если в массиве большое количество одинаковых чисел.
Эффективность алгоритма минимальна, если все числа в массиве различны.
Для записи таких чисел требуется не меньше, чем logmn разрядов.
Сложность алгоритма в этом случае = n* logmn
Опр. Действие по однократной обработке всего множества данных называется фазой.
Опр. Последовательность элементов, упорядоченных по ключу, называется серией.
Наиболее известные алгоритмы внешней сортировки:
Повторяем алгоритм до тех пор, пока файл не станет единой серией.
Сортировка естественным слиянием
Перед началом сортировки на данных выделяются максимальные серии:
2. берем второй элемент и сравниваем с первым. Если он больше первого, то включаем его в серию.
После предварительной обработки производим сортировку слиянием.
http://www.youtube.com/watch?v=Ns4TPTC8whw
http://www.youtube.com/watch?v=lyZQPjUT5B4
Алгоритмы и анализ сложности
Алгоритмы сортировки.
Алгоритм сортировки выбором
Количество проходов = ?
Количество сравнений = ?
в худшем случае = ?
Количество обменов в худшем случае = ?
Пример.
Алгоритм сортировки выбором
Количество проходов = n-1
Количество сравнений = n(n-1)/2
в худшем случае = n(n-1)/2
Количество обменов в худшем случае = n
Пример.
Алгоритм сортировки вставкой
(k+1)-ый элемент.
Оценка в худшем случае:
Количество сдвигаемых элементов = ?
Общее количество сдвигов = ?
Алгоритм сортировки вставкой
(k+1)-ый элемент.
Оценка в худшем случае:
Количество сравнений за 1 проход = log2k
Количество сдвигаемых элементов = k
Общее количество сдвигов = ∑ k = n(n-1)/2
Общее количество операций сравнения = log21+log22+log23+…+log2(n-1) ≤ n log2n
Пузырьковая сортировка
Оценка в худшем случае:
Количество обменов = ?
Общее количество обменов = ?
Пузырьковая сортировка
Оценка в худшем случае:
Количество сравнений за 1 проход = k
Количество обменов = k
Общее количество обменов = n(n-1)/2
Общее количество операций сравнения = n(n-1)/2
Сортировка слиянием
Массив разбивается в группы по 1 элементу.
Каждые 2 соседние группы упорядоченно соединяются (операция «слияния») в группу большего размера.
Шаг 2 повторяется до тех пор, пока весь массив не станет 1 группой.
Алгоритм операции «слияния»:
В начале каждой группы ставится указатель.Сравниваются два элемента, на которых стоят указатели.
Меньший элемент помещается в выходную группу, и указатель с этого элемента смещается на следующий.
Пример. Сложность алгоритма:
Всего выполняется log2n шагов.
На каждом шаге – n операций сравнения.
Итого: n log2n
Пирамидальная сортировка
Опр. Массив с индексом 1,…,n называется кучей, если для всех k выполняется: a[k] ≤ a[2k], a[k] ≤ a[2k+1].
1) Алгоритм построения кучи:
Пусть элементы с индексами n/2+1,…,n в массиве имеют структуру кучи.Проверяем, удовлетворяет ли элемент a[k] (k ≤ n/2) структуре кучи.
Если да, то добавляем его к построенной части. Если нет, то меняем местами a[k] и min{a[2k],a[2k+1]}.
Пример. Структура «куча» Хранение в массиве
Пирамидальная сортировка
Меняем местами элементы a[1] и a[n]. В итоге, самый маленький элемент – в конце массива.
Перестраиваем «кучу» на элементах a[1],…,a[n-1].
Меняем местами элементы a[1] и a[n-1]. Повторяем пункты 1 и 2. И так далее.
Количество проходов = ?
Количество сравнений во время 1 прохода ≤ ?
Количество проходов (перестроений) = ?
Количество сравнений во время 1 перестроения ≤ ?
Пирамидальная сортировка
Меняем местами элементы a[1] и a[n]. В итоге, самый маленький элемент – в конце массива.
Перестраиваем «кучу» на элементах a[1],…,a[n-1].
Меняем местами элементы a[1] и a[n-1]. Повторяем пункты 1 и 2. И так далее.
Количество проходов = n/2
Количество сравнений во время 1 прохода ≤ log2n
Количество проходов (перестроений) = n-1
Количество сравнений во время 1 перестроения ≤ log2n
Итоговая сложность n log2n
Быстрая сортировка
Выбираем эталонный элемент e (первый, последний, случайный)
Производим перераспределение элементов массива на 3 группы: <e, =e, >e
Вызываем быструю сортировку для первой и третьей группы.
Алгоритм перераспределения элементов:
Просматриваем слева в поисках первого элемента, который больше e.Просматриваем справа в поисках первого элемента, который меньше e.
Меняем найденные элементы местами.
Продолжаем движение с тех элементов, на которых остановились.
Пример.
Быстрая сортировка
Пример.
Оценка сложности:
В худшем случае – O(n2)
В среднем случае – O(n log2n)
? Достоинства и недостатки алгоритма определить самостоятельно.
Карманная сортировка
Опр. Карманами будем называть m стеков, занумерованных числами 0,…,m-1.
Пусть имеется массив целых чисел, записанных в m-ичной системе счисления и имеющих в своей записи не более, чем k цифр.
Сортировка состоит из k фаз.
На i-той (i=1,…,k) фазе выполняются действия:
перебираем по очереди элементы массива; каждое очередное число заносится в стек с тем номером, какая цифра стоит на i-том с конца месте.После того, как все числа распределены по карманам, производим объединение стеков в следующем порядке: 0-ой, 1-ый, 2-ой и т.д.
После k-ой фазы массив будет полностью отсортирован.
Карманная сортировка
Оценка сложности алгоритма:
Количество фаз = ?
Количество операций во время каждой фазы = ?
? При каком наборе чисел алгоритм наиболее эффективен?
? При каком наборе чисел эффективность алгоритма минимальна?
Карманная сортировка
Оценка сложности алгоритма:
Количество фаз = k
Количество операций во время каждой фазы = n
Алгоритм эффективен, если в массиве большое количество одинаковых чисел.
Эффективность алгоритма минимальна, если все числа в массиве различны.
Для записи таких чисел требуется не меньше, чем logmn разрядов.
Сложность алгоритма в этом случае = n* logmn
Алгоритмы внешней сортировки
Внешняя сортировка применяется к данным, которые расположены на внешних носителях и целиком не помещаются в оперативную память.
Особенность алгоритмов: должны быть построены на принципе последовательного, а не произвольного доступа.
Опр. Действие по однократной обработке всего множества данных называется фазой.
Опр. Последовательность элементов, упорядоченных по ключу, называется серией.
Наиболее известные алгоритмы внешней сортировки:
Сортировки слиянием (принцип – распределение и слияние)
Улучшенные сортировки (многофазная и каскадная сортировки).
Сортировка простым слиянием
Исходные данные разбиваются на 2 вспомогательных файла.
Из вспомогательных файлов данные сливаются обратно с образованием из одиночных элементов упорядоченных пар.
Повторяем п.1 и 2. теперь упорядоченные пары преобразуются в упорядоченные четверки. И так далее.
Повторяем алгоритм до тех пор, пока файл не станет единой серией.
Пример.
Сортировка естественным слиянием
Перед началом сортировки на данных выделяются максимальные серии:
1. берем первый элемент;
2. берем второй элемент и сравниваем с первым. Если он больше первого, то включаем его в серию.
3. Продолжаем добавлять в серию элементы до тех пор, пока не встретится элемент меньший, чем предыдущий.
После предварительной обработки производим сортировку слиянием.
Пример.
Алгоритмы сортировки в танцах
Сортировка выбором