Быстрая сортировка — различия между версиями
(→Среднее время работы) |
(→Среднее время работы) |
||
Строка 44: | Строка 44: | ||
Поскольку каждая пара элементов срановается не более одного раза, полное количество сравнений выражается как | Поскольку каждая пара элементов срановается не более одного раза, полное количество сравнений выражается как | ||
− | <tex>X = \sum\limits_{i=1}^{n-1}\sum\limits_{j=i+1}^{n} X_{ij}</tex> | + | <tex>X = \sum\limits_{i=1}^{n-1}\sum\limits_{j=i+1}^{n} X_{ij}</tex>, где <tex>X_{ij} = 1</tex>если произошло сравнение <tex>z_i</tex> и <tex>z_j</tex> и <tex>X_{ij} = 0</tex>, если сравнения не произошло. |
Применим к обоим частям равенства операцию вычисления матожидания и воспользовавшись ее линейностью получим | Применим к обоим частям равенства операцию вычисления матожидания и воспользовавшись ее линейностью получим |
Версия 01:22, 16 июня 2011
Быстрая сортировка(qsort, сортировка Хоара) - один из самых известных и широко используемых алгоритмов сортировки. Среднее время работы
, что является асимптотически оптимальным временем работы для алгоритма, основанного на сравнении.Содержание
Алгоритм
- Выбираем опорный элемент.
- Разбиваем массив таким образом, что все элементы меньшие или равные опорному будут лежать левее опроного элемента, а большие или равные правее.
- Рекурсивно сотрируем "маленькие" и "большие" элементы.
Оптимизация глубины рекурсии до O(logn) в худшем случае
В случае повторяющихся неудачных разбиений опорным элементом, глубина рекурсии может достичь
. Этого можно избежать, если в цикле разбивать массив, но рекурсивно вызываться только от части, содержащей меньшее число элементов, а большую часть продолжать разбивать в цикле.Асимптотика
Худшее время работы
Обозначим худшее время работы за
. Получим рекуррентное соотношение,где , так как мы разбиваемся на 2 подзадачи.
Предположим, что
. Тогда получим
Заметим, что
принимает максимальное значение на концах интервала [0; n-1], что позволяет нам сделать оценку
Подставим это в наше выражение для
Таким образом
.Среднее время работы
Лемма: |
Пусть Х - полное количество сравнений элементов с опорным за время работы сортировки. Тогда время работы сортировки равно . |
Доказательство: |
Нам необходимо вычислить полное количество сравнений. Переименуем элементы массива как , где наименьший по порядку элемент. Также введем множество .Заметим, что сравнеие каждой пары элементов происходит не больше одного раза, так как элемент сравнивается с опорным, а опорный элемент после разбиения больше не будет участвовать в сравнении. Поскольку каждая пара элементов срановается не более одного раза, полное количество сравнений выражается как , где если произошло сравнение и и , если сравнения не произошло. Применим к обоим частям равенства операцию вычисления матожидания и воспользовавшись ее линейностью получим сравнивается с Осталось вычислить величину сравнивается с .сравнивается с первым опорным элементом был или первым опорным элементом был первым опорным элементом был |
Таким образом матожидание времени работы быстрой сортировки будет
.Ссылки
http://ru.wikipedia.org/wiki/Быстрая_сортировка
http://en.wikipedia.org/wiki/Quicksort
Литература
- Т. Кормен, Ч. Лейзерсон, Р. Ривест: Алгоритмы: построение и анализ глава 7