Pour élucider la discussion dans les commentaires, il est important de savoir ce que vous mesurez la croissance par rapport.
Comme mentionné par @Kaveh, n'est pas linéaire dans les deux en même temps, mais est linéaire si l'un est une constante et que l'autre croît.O ( m n )
D'un autre côté, serait probablement considéré comme linéaire. Intuitivement, si m double, ou si n double, ou même si m et n double, m + n ne peut pas plus que doubler. Ce n'est pas le cas de m n ; si m et n doublent tous les deux m n . C'est pourquoi, dans de nombreux contextes, ce temps de fonctionnement serait considéré comme quadratique. Je donne un exemple de cela avec une correspondance de chaîne dans quelques paragraphes.O ( m + n )mnmnm + nm nmnm n
Mais généralement, lorsque vous utilisez la notation Big- , vous l'utilisez en référence à quelque chose en particulier. Puisque nous sommes principalement des théoriciens, c'est généralement la taille de l'entrée du problème.O
Prenons l'exemple de Matrix Addition. L'ajout de deux matrices prend du temps O ( m n ) . Mais chaque élément de notre entrée n'est touché qu'une seule fois, ce qui est généralement appelé linéaire. En d'autres termes, notre entrée est de taille O ( m n ) , donc un temps d'exécution de O ( m n ) est linéaire dans la taille de l'entrée.m × nO ( m n )O ( m n )O ( m n )
Regardons maintenant la correspondance des chaînes - à savoir, on nous donne une chaîne de taille et une chaîne de taille n et nous voulons voir s'il y a une occurrence de la plus petite chaîne dans la plus grande chaîne. Nous pouvons vérifier cela naïvement en temps O ( m n ) ; cela serait généralement considéré comme quadratique. Pourquoi? Si m et n peuvent être n'importe quoi, définissez m = n . Ensuite, notre temps de course est O ( m 2 ) et notre entrée est de taille 2 m .mnO ( m n )mnm = nO ( m2)2 m
En revanche, si nous utilisons l' algorithme de Rabin-Karp , nous obtenons (en moyenne) le temps . Notre entrée était composée des deux chaînes, donc notre entrée était également de taille O ( m + n ) . Par conséquent, cela serait généralement appelé linéaire.O ( m + n )O ( m + n )
Pour résumer: est généralement appelé linéaire pour des choses comme la multiplication matricielle car il est linéaire dans la taille de l'entrée, mais il est généralement appelé quadratique pour des choses comme la correspondance de chaînes en raison de l'entrée plus petite. Le terme approprié dépend du contexte dans lequel vous l'utilisez.O ( m n )