Таким образом, при решении задач важно оценивать имеющиеся временные ресурсы и объём памяти, и выбирать подходящий алгоритм. Также нужно учитывать, как изменится объём данных, с которыми будет работать алгоритм.
Если у вас всего 1000 товаров, то любой алгоритм сортировки упорядочит их так быстро, что пользователь не заметит. Если же у вас в наличии 5 000 000 товаров, разница может быть уже существенна.
То же самое касается и памяти. Если у вас в наличии объём свободной памяти, превосходящий объём данных, можно скопировать все данные в дополнительную память.
Для некоторых сортировок как раз нужна свободная память, объём которой не меньше объёма сортируемых данных. Если данных станет хоть немного больше, возможно вы уже не сможете применить свой алгоритм, так как свободной памяти будет недостаточно для его работы.
Использование дополнительной памяти — одна из ключевых характеристик сортировки.
Алла: Эх, что-то забыли мы спросить про это ограничение у Кондратия! Нужно уточнить.
Тимофей: Да, уточним. Ещё одна характеристика алгоритмов сортировки — устойчивость.
Если после работы алгоритма порядок равных элементов сохраняется, сортировка называется устойчивой. В противном случае — неустойчивой.
Предположим, нужно отсортировать города по количеству жителей.
В Котограде и Светлозаводск одинаковое количество жителей. Первый алгоритм сортировки сохранил их относительный порядок, а при использовании второго алгоритма порядок изменился.
В примере во втором алгоритме Свиреповск и Большие Утюги также поменялись местами. Но даже если бы порядок остался прежним, алгоритм все равно был бы неустойчивый. Одной инверсии в примере достаточно, чтобы сделать этот вывод.
Можно отметить важное свойство теории алгоритмов: при наличии одинаковых значений возможно несколько вариантов верно отсортированных последовательностей. Если сортировка устойчивая, последовательность ровно одна.
Рита: Про это тоже не спросили. Насколько я знаю, у Табулятинска, откуда родом любимый ручной скунс Кондратия, и села Пробелы один и тот же «треш-индекс» — четыре. В исходном списке Табулятинск идёт раньше. Вдруг Кондратий не хочет, чтобы после сортировки поменялся исходный порядок равных элементов?
Гоша: Да, нужно это выяснить.
Алла: Кстати, а сколько всего можно составить разных последовательностей из массива чисел?
Тимофей: Если все
n чисел в массиве различные, получится
n факториал разных последовательностей.
Алла: Почему факториал?
Допустим, дан массив чисел numbers:
Скопировать кодPYTHON
numbers = [2, 1, 5]
Может быть всего 6 последовательностей.
Скопировать кодPYTHON
1 2 5
1 5 2
2 1 5
2 5 1
5 1 2
5 2 1
На первое место можно выбрать одно из трёх чисел. На второе — одно из двух чисел, так как числа не повторяются, а одно уже занято. Когда первые две позиции заполнены, для третьей позиции вариант остаётся только один вариант.
По теореме умножения получаем: 3 х 2 х 1 = 6.
Это и есть формула вычисления факториала — произведение чисел от 0 до
n.