Изучив базовые алгоритмы сортировки (пузырьком, слиянием, быстрая и т.д.), мы обычно запоминаем, что временная сложность эффективной сортировки - O(n*log(n)). Но в один прекрасный момент мы встречаем, например, поразрядную сортировку и узнаём, что её временная сложность O(n*k), где k (в данном случае количество разрядов) - фиксированное значение для заданного множества элементов. Что делает поразрядную сортировку особенной? И что объединяет большинство остальных алгоритмов сортировки? Сравнение элементов (в поразрядной сортировке его нет). Именно сравнение элементов определяет минимальную временную сложность любого соответствующего алгоритма - Ω(n*log(n)). Почему это так? Сортировку массива A длины n можно всегда представить в виде дерева решений, каждым узлом которого будет попарное сравнение элементов массива. Для примера проще всего представить или нарисовать дерево решений для массива длины 3. Каждый путь от корня к листу такого дерева решений определяет минимальное количество срав
O(n*log(n)) и минимальная сложность алгоритмов сортировки
19 февраля 202019 фев 2020
141
1 мин