Теорема о нижней оценке для сортировки сравнениями — различия между версиями
(Статься переписана, добавлены источники, категории, шаблон "определение") |
|||
Строка 1: | Строка 1: | ||
− | + | {{Определение | |
+ | |definition=Сортировка сравнениями {{---}} алгоритм сортировки, который совершает операции сравнения элементов, но никак не использует их внутреннюю структуру. | ||
+ | }} | ||
{{ | {{ | ||
Теорема | Теорема | ||
|about=о нижней оценке для сортировки сравнениями | |about=о нижней оценке для сортировки сравнениями | ||
− | |statement=В | + | |statement=В худшем случае любой алгоритм сортировки сравнениями выполняет <tex>\Omega(n \log n)</tex> сравнений, где <tex>n</tex> {{---}} число сортируемых элементов. (Теорема справедлива и для рандомизированных алгоритмов сортировки, но в статье не приводится доказательство этого факта). |
− | |proof= | + | |proof=Любому алгоритму сортировки сравнениями можно сопоставить дерево. В нем узлами являются операции сравнения элементов, ребрами {{---}} переходы между состояниями алгоритма, а листьями {{---}} конечные перестановки элементов (соответствующие завершению алгоритма сортировки). Необходимо доказать, что высота такого дерева для любого алгоритма сортировки сравнениями не меньше чем <tex>O(n \log n)</tex>, где <tex>n</tex> {{---}} количество элементов. |
− | + | При сравнении двух элементов, существует два возможных исхода (<tex>a_i < a_j</tex> и <tex>a_i \geq a_j</tex>), значит, каждый узел дерева имеет не более двух сыновей. Всего существует <tex>n!</tex> различных перестановок <tex>n</tex> элементов, значит, число листьев нашего дерева не менее <tex>n!</tex> (в противном случае некоторые перестановки были бы не достижимы из корня, а, значит, алгоритм не правильно работал бы на некоторых исходных данных). | |
− | + | Пример дерева для алгоритма сортировки <tex>n = 3</tex> элементов: | |
[[Файл:DecisionTree.png]] | [[Файл:DecisionTree.png]] | ||
− | |||
− | + | Докажем, что двоичное дерево с <tex>n!</tex> листьями имеет глубину <tex>\Omega(n \log n)</tex>: | |
− | Итак, для любого алгоритма сортировки сравнениями существует такая перестановка, на которой он выполнит <tex>\Omega(n \log n)</tex> сравнений, ч. т. д. | + | <tex> h = \log_2 n! = log_2 1 + \log_2 2 + \ldots + \log_2 n ></tex> <tex>n/2 \log_2 (n/2) = n/2(\log_2 n - 1) = \Omega (n \log n)</tex> |
+ | |||
+ | Итак, для любого алгоритма сортировки сравнениями, существует такая перестановка, на которой он выполнит <tex>\Omega(n \log n)</tex> сравнений, ч. т. д. | ||
}} | }} | ||
==Источники== | ==Источники== | ||
* Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 8. Сортировка за линейное время // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с | * Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 8. Сортировка за линейное время // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с | ||
+ | * [http://da.kalinin.ru/2011/lectures/20110902-1/linear-sort.pdf Андрей Калинин Сортировка за линейное время] | ||
+ | * [http://lectures.stargeo.ru/alg/algorithms.htm#_Toc308850829 Конспект по курсу "Алгоритмы и алгоритмические языки"] (доказательство теоремы через формулу Стирлинга). | ||
+ | |||
+ | [[Категория: Дискретная математика и алгоритмы]] | ||
+ | [[Категория: Сортировки]] |
Версия 21:21, 7 мая 2012
Определение: |
Сортировка сравнениями — алгоритм сортировки, который совершает операции сравнения элементов, но никак не использует их внутреннюю структуру. |
Теорема (о нижней оценке для сортировки сравнениями): |
В худшем случае любой алгоритм сортировки сравнениями выполняет сравнений, где — число сортируемых элементов. (Теорема справедлива и для рандомизированных алгоритмов сортировки, но в статье не приводится доказательство этого факта). |
Доказательство: |
Любому алгоритму сортировки сравнениями можно сопоставить дерево. В нем узлами являются операции сравнения элементов, ребрами — переходы между состояниями алгоритма, а листьями — конечные перестановки элементов (соответствующие завершению алгоритма сортировки). Необходимо доказать, что высота такого дерева для любого алгоритма сортировки сравнениями не меньше чем , где — количество элементов.При сравнении двух элементов, существует два возможных исхода ( и ), значит, каждый узел дерева имеет не более двух сыновей. Всего существует различных перестановок элементов, значит, число листьев нашего дерева не менее (в противном случае некоторые перестановки были бы не достижимы из корня, а, значит, алгоритм не правильно работал бы на некоторых исходных данных).Пример дерева для алгоритма сортировки элементов:
Итак, для любого алгоритма сортировки сравнениями, существует такая перестановка, на которой он выполнит сравнений, ч. т. д. |
Источники
- Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 8. Сортировка за линейное время // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с
- Андрей Калинин Сортировка за линейное время
- Конспект по курсу "Алгоритмы и алгоритмические языки" (доказательство теоремы через формулу Стирлинга).