Что такое простое английское объяснение обозначения «Big O»?
Я хотел бы подчеркнуть, что движущий мотив для «Большой O» нотации - это одна вещь, когда входной размер алгоритма получает слишком большой некоторые части (то есть константы, коэффициенты , слагаемые) уравнения, описывающего меру алгоритма, становится настолько незначительным , что мы игнорируем их. Части уравнения, которые выживают после игнорирования некоторых его частей, обозначаются как «Большой O» нотации алгоритма.
Так что, если размер ввода НЕ слишком велик, идея «Большой O» нотации (верхняя граница) будет неважна.
Les говорят, что вы хотите количественно оценить производительность следующего алгоритма
int sumArray (int[] nums){
int sum=0; // taking initialization and assignments n=1
for(int i=0;nums.length;i++){
sum += nums[i]; // taking initialization and assignments n=1
}
return sum;
}
В приведенном выше алгоритме, скажем, вы узнаете T(n)
следующим образом (сложность по времени):
T(n) = 2*n + 2
Чтобы найти нотацию «Big O», нам нужно рассмотреть очень большой размер ввода:
n= 1,000,000 -> T(1,000,000) = 2,000,002
n=1,000,000,000 -> T(1,000,000,000) = 2,000,000,002
n=10,000,000,000 -> T(10,000,000,000) = 20,000,000,002
Позволяет дать этот аналогичный вход для другой функции F(n) = n
n= 1,000,000 -> F(1,000,000) = 1,000,000
n=1,000,000,000 -> F(1,000,000,000) = 1,000,000,000
n=10,000,000,000 -> F(10,000,000,000) = 10,000,000,000
Как видно из рисунка, размер входного файла становится слишком большим T(n)
, приблизительно равным или приближающимся к F(n)
, поэтому константа 2
и коэффициент 2
становятся слишком незначительными Теперь пришла идея обозначения Big O
O(T(n)) = F(n)
O(T(n)) = n
Мы говорим, что большой O T(n)
равен n
, а запись O(T(n)) = n
, это верхняя граница T(n)
, так как n
становится слишком большим . этот же шаг применяется для других алгоритмов.