Para esclarecer a discussão nos comentários, é importante o que você está medindo em relação ao crescimento.
Conforme mencionado por @Kaveh, não é linear nos dois ao mesmo tempo, mas é linear se um for uma constante e o outro crescer.O ( m n )
Por outro lado, provavelmente seria considerado linear. Intuitivamente, se m dobrar, ou se n dobrar, ou mesmo se m e n dobrarem, m + n não poderá mais que dobrar. Isso não é verdade para m n ; se m e n, o dobro de m n, aumenta em 4. É por isso que em muitos contextos esse tempo de execução seria considerado quadrático. Eu dou um exemplo disso com correspondência de string em alguns parágrafos.O ( m + n )mnmnm+nmnmnmn
Mas geralmente quando você está usando a notação Big- , está usando-a em referência a algo em particular. Como somos na maioria teóricos, geralmente é o tamanho da entrada para o problema.O
Vamos pegar Matrix Addition, por exemplo. Adicionar duas matrizes leva tempo O ( m n ) . Mas cada elemento de nossa entrada é tocado apenas uma vez, então isso geralmente seria chamado linear. Em outras palavras, nossa entrada é do tamanho O ( m n ) , portanto, um tempo de execução de O ( m n ) é linear no tamanho da entrada.m×nO(mn)O(mn)O(mn)
Agora, vejamos a correspondência de cadeias - ou seja, recebemos uma cadeia de tamanho e uma cadeia de tamanho n e queremos ver se há uma ocorrência da cadeia menor na cadeia maior. Podemos verificar isso ingenuamente em O ( m n ) tempo; isso geralmente seria considerado quadrático. Por quê? Se m e n puder ser qualquer coisa, defina m = n . Então nosso tempo de execução é O ( m 2 ) e nossa entrada é de tamanho 2 m .mnO(mn)mnm=nO(m2)2m
Por outro lado, se usarmos o algoritmo Rabin-Karp , obtemos (em média) tempo . Nossa entrada consistia em ambas as cadeias, então nossa entrada também era do tamanho O ( m + n ) . Portanto, isso geralmente seria chamado de linear.O(m+n)O(m+n)
Resumindo: geralmente é chamado linear para coisas como multiplicação de matrizes porque é linear no tamanho da entrada, mas geralmente é chamado quadrático para coisas como correspondência de cadeias por causa da entrada menor. O termo apropriado depende do contexto em que você o está usando.O(mn)