Рассмотрим следующую функцию:
int foo(int n) {
int x = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
x -= 1;
}
}
x = 0;
for(int i = 0; i < n; i++) {
x += 1;
}
return x;
}
В соответствии с обозначением Big O, сложность этой функции во время выполнения будет (я буду очень точен):
O(1 + N^2 + 1 + N) = O(N^2)
Зависимость между N
и верхней границей времени выполнения алгоритма равна:
1 + N^2 + 1 + N
Согласно этой статье , Асимптотический анализ позволяет отбросить константы и недоминантные члены.Таким образом, зависимость от результата будет:
1 + N^2 + 1 + N = N^2
Это то же выражение, что и для обозначения Big O.
Но согласно эта лекция Асимптотический анализ не позволяет намчтобы отбросить константы, а также недоминантные термины, поэтому, если я захочу оценить это выражение с помощью асимптотического анализа, я получу:
1 + N^2 + 1 + N
Я очень смущен, потому что до этого момента я был полностью уверен, что асимптотический анализи Big O - это одно и то же.Итак, у меня и два вопроса:
- Какая разница между нотацией Big O и асимптотическим анализом?
- Какая из двух статей лжёт?