Хорошо, определение big-O состоит в том, что функция g (x) равна O (f (x)) , если g (x) ≤ kf (x) для некоторой константы k .
Другими словами, big-O дает вам некоторое представление о том, как быстро растет функция;если это $ O (n) *, оно увеличивается пропорционально длине ввода.То, что вы рассчитываете, и детали вычислений скрыты в константе.
Вот несколько примеров:
for i from 1 to n {
do something
}
равно O (n) .Вы просматриваете n пунктов по одному разу.
for i from 1 to n {
}
for i from 1 to n {
}
дважды в последовательности по-прежнему O (n) , потому что вы смотрите на каждый из n предметов дважды.Это 2n , что по-прежнему O (n) .
С другой стороны,
for i from 1 to n {
for j from 1 to n {
}
}
равно O (n 2 ) потому что для каждого шага i вы проходите через 1-n для j .
Уточните отступ кода, чтобы мы были уверены, что вы делаете, и посмотрите, помогут ли эти примеры.
Обновление
Это довольно забавные вопросы, если подумать.
Рассмотрим, каковы будут значения i*i
, т. Е. I 2 .В худшем случае, i == n и, следовательно, j равно 1,4,9,16...(n*n)
.Какова сумма х 2 для х от 1 до n?(Подсказка: 1/6 (...) (...), теперь вы заполняете пробелы.)
когда этот термин будет правдой?