Для любых заданных постоянных значений m
и n
мы не можем ничего сказать о том, какое из них будет быстрее. Это потому, что Big-O, по определению, применяется только тогда, когда значения стремятся к бесконечности. В дальнейшем я буду предполагать, что мы говорим о том, что происходит, когда значения стремятся к бесконечности.
Мы хотим знать, когда O(m*n)
быстрее, чем O(n^2)
. Формальные определения Big-O проверяют либо f(n) <= k.g(n)
, либо f(n)/g(n)
. В любом случае, начиная с n > 0
, легко видеть, что мы можем просто отменить один n
из m*n
и n^2
и получить эквивалентную проверку.
Итак, теперь мы хотим выяснить, когда O(m)
быстрее, чем O(n)
, т. Е. m
меньше n
для каждого значения n
за пределами некоторой точки.
На самом деле это то же самое, что сказать m = o(n)
, что является вашим ответом. Примечание: это little-O .
В менее абстрактных терминах m
может быть любой функцией n
"меньше" n
(более чем на постоянный коэффициент). Вот несколько примеров:
m = 1
работает.
m = log n
работает.
m = sqrt(n)
работает.
m = n / 231689
не работает (отличается постоянным коэффициентом).
m = n - 9873054
не работает (отличается постоянным коэффициентом).
m = n^2
не работает (m
растет быстрее).