Я сейчас читаю учебник для моего класса Java III. Мы читаем о Big-Oh, и меня немного смущает его формальное определение.
Формальное определение: «Функция f (n) имеет порядок не более g (n), то есть f (n) = O (g (n)), если существует положительное действительное число c и положительное целое число N такой, что f (n) <= cg (n) для всех n> = N. То есть cg (n) является верхней границей f (n), когда n достаточно велико. "
Хорошо, это имеет смысл. Но держись, продолжай читать ... книга дала мне такой пример:
"В сегменте 9.14 мы сказали, что
алгоритм, который использует 5n + 3 операции
является O (n). Теперь мы можем показать, что 5n + 3 =
O (n), используя формальное определение
Большой О.
Когда n> = 3, 5n + 3 <= 5n + n = 6n.
Таким образом, если мы допустим f (n) = 5n + 3, g (n) =
n, c = 6, N = 3, мы показали, что
f (n) <= 6 г (n) для n> = 3 или 5n + 3 =
На). Это если алгоритм
требует времени, прямо пропорционального
5n + 3, это O (n). "
Хорошо, этот вид имеет смысл для меня. Они говорят, что если n = 3 или больше, 5n + 3 занимает меньше времени, чем если бы n было меньше 3 - таким образом, 5n + n = 6n - верно? Имеет смысл, поскольку если n было 2, 5n + 3 = 13, а 6n = 12, но когда n равно 3 или больше, 5n + 3 всегда будет меньше или равно 6n.
Вот где я запутался. Они дают мне другой пример:
Пример 2: «Покажем, что 4n ^ 2 + 50n
- 10 = O (n ^ 2). Легко видеть, что: 4n ^ 2 + 50n - 10 <= 4n ^ 2 + 50n
для любого n. Поскольку 50n <= 50n ^ 2 для n </p>
= 50, 4n ^ 2 + 50n - 10 <= 4n ^ 2 + 50n ^ 2 = 54n ^ 2 для n> = 50. Таким образом, с c = 54 и N = 50 мы показали, что 4n ^ 2
+ 50n - 10 = O (n ^ 2). "
Это утверждение не имеет смысла: 50n <= 50n ^ 2 для n> = 50.
Разве никто не собирается сделать 50n меньше, чем 50n ^ 2? Не больше или равно 50? Почему они даже упомянули, что 50n <= 50n ^ 2? Какое это имеет отношение к проблеме? </p>
Кроме того, 4n ^ 2 + 50n - 10 <= 4n ^ 2 + 50n ^ 2 = 54n ^ 2 для n> = 50 будет истинным независимо от того, что n.
А как в мире сборочные цифры показывают, что f (n) = O (g (n))?