Строго говоря, Big-O не говорит о росте числа, которое вы фактически используете.
Запись Big-O - это то, что происходит в пределе как размерпроблема (n
) стремится к бесконечности.Конкретные небольшие числа, такие как 4096 и 8192, не имеют отношения к классификации Big-O.Кроме того, big-O - это верхний предел .Пузырьковая сортировка O (n ^ 2).Это также O (n ^ 3), и O (n ^ 27), и O (2 ^ n), потому что все эти функции также обеспечивают верхние границы своего времени работы в пределе.Очень слабые верхние границы, но, тем не менее, границы.
На практике , многие или большинство алгоритмов, которые вы будете использовать, могут наблюдаться для реалистичных значений n
, чтобы следовать тренду, соответствующемув их «лучшую» сложность.И это то, что вы видите здесь - удвоение размера в четыре раза увеличивает время, потому что время приблизительно пропорционально n ^ 2.Поскольку время пропорционально n ^ 2, алгоритм равен O (n ^ 2).Обратное значение не обязательно имеет место.
Люди обычно говорят, что «сортировка по пузырькам - это O (n ^ 2)», и они имеют в виду, «время, необходимое для сортировки по пузырькам, пропорционально квадрату входного размера,игнорирование небольшого процента особых случаев, которые намного быстрее (уже отсортированные данные в случае пузырьковой сортировки) ".Оба утверждения верны, но последнее не совсем то, что на самом деле означает первое, поэтому иногда это сбивает с толку.Несколько ответов здесь говорят об одном и том же, и они неверны в том, что касается математического определения big-O.Но неправильное использование настолько распространено, что его нельзя игнорировать, по-видимому, потому, что люди неофициально знакомятся с классификацией алгоритмов больших чисел без обучения формальному определению.
Итак, когда кто-то говорит вам, чтоАлгоритм O (n ^ 2), есть довольно высокая вероятность того, что они пытаются сказать вам, что его худший случай Θ (n ^ 2), и если это так, они вполне могут быть дальшепытаюсь сказать вам, что эта тенденция наблюдается для тех видов n
, которые вам небезразличны.Учитывая это злоупотребление обозначениями, поэтому «O (n ^ 2) алгоритмы» все становятся менее эффективными, когда вы увеличиваете n
.