Чтобы пояснить обсуждение в комментариях, важно, что вы измеряете относительно роста.
Как упомянуто @Kaveh, не является линейным в обоих случаях одновременно, но является линейным, если один является константой, а другой растет.O ( м н )
С другой стороны, скорее всего будет считаться линейным. Интуитивно понятно, что если удваивается, или удваивается, или даже если и удваиваются, не может более чем удвоиться. Это не верно для ; если и оба удваивают увеличиваются на 4. Именно поэтому во многих контекстах это время выполнения будет считаться квадратичным. Я приведу пример этого с совпадением строк в нескольких параграфах.м н м н м + н м н м н м нO ( m + n )мNмNм + нм нмNм н
Но обычно, когда вы используете нотацию Big- , вы используете ее в отношении чего-то конкретного. Так как мы в основном теоретики, это, как правило, размер вклада в проблему.О
Давайте возьмем Matrix Addition, например. Добавление двух матриц занимает время. Но каждый элемент нашего ввода затрагивается только один раз, поэтому его обычно называют линейным. Другими словами, наш вход имеет размер , поэтому время работы является линейным по размеру входа.O ( m n ) O ( m n ) O ( m n )м × нO ( м н )O ( м н )O ( м н )
Теперь давайте посмотрим на сопоставление строк - а именно, нам дана строка размера и строка размера и мы хотим посмотреть, есть ли вхождение строки меньшего размера в большей строке. Мы можем проверить это наивно за время; это обычно считается квадратичным. Зачем? Если и могут быть чем угодно, установите . Тогда наше время работы и наш вход имеет размер .n O ( m n ) m n m = n O ( m 2 ) 2 mмNO ( м н )мNm = nO ( м2)2 м
С другой стороны, если мы используем алгоритм Рабина-Карпа , мы получаем (в среднем) времени. Наш вход состоял из обеих строк, поэтому мы также имели размер . Следовательно, это обычно называется линейным.O ( m + n )O ( m + n )O ( m + n )
Подводя итог: обычно называется линейным для таких вещей, как умножение матриц, потому что оно линейно по размеру входных данных, но обычно называется квадратичным для таких вещей, как сопоставление строк из-за меньшего входного значения. Какой термин подходит, зависит от контекста, в котором вы его используете.O ( м н )