Ce n'est pas un combat
Je vais t'expliquer pourquoi on dit que la multiplication naïve (celle de l'école) est en O(n²). Je note cette multiplication par X, et je considère un nombre M de m chiffres et un nombre N de n chiffres. On peut prendre M>N sans perdre en généralité. M et N sont codés en notation décimale, par convention je prends où chaque est un chiffre.
Je note la complexité de cet algorithme par C(X(m,n)).
Multiplier deux chiffres ou ajouter deux chiffres sont des opérations élémentaires. Cela signifie que leur coût est une constante. Faire 9x9 ou 7+8 prends le même temps. Si on formalise on a simplement C(X(1,1)) et C(+(1,1)) sont en O(1). Accéder à un chiffre d'un nombre est aussi en O(1). Si tu ne comprends pas la notation grand O google un coup.
Il n'est pas difficile de comprendre qu'additioner deux nombres M et N revient en fait à créer un nombre d'au plus m+1 chiffres en additionnant chiffres à chiffres les nombres, cela signifie que C(+(m,n)) est en O(m). Je pense qu'il est tout aussi compréhensible que multiplier un nombre M par un chiffre demande m multiplications, soit C(X(m,1)) est en O(m).
X est un algo simple, j'obtiens n nombres (en multipliant M par chaque chiffres de N) d'au plus m+1 chiffres que j'additionne entre eux, soit
soit C(X(m,n)) est en O(mn).
Prenons maintenant ton algo que je vais noter Y.
Dans un premier temps tu construis une table de 10 éléments qui correspondent à 0xM, 1xM, ..., 9xM.
Tu obtiens ensuite n nombres (en faisant un lookup sur ta table, cela peut se faire en temps constant) d'au plus m+1 chiffres que tu additionnes entre eux, soit
soit C(Y(m,n)) est en O(mn).
LEs deux algorithmes ont donc le même comportement en général et sont aussi bon (ou mauvais suivant le point de vue) que l'autre. Ce qui «rend» leur comportement mauvais est le fait qu'il y a obligatoirement la phase «j'additionne n nombres de m chiffres». Il est clair que créer un table est intéressant, ça va un peu plus vite surtout si on ne connaît pas les tables de multiplication. Néanmoins, cette étape nécessite un espace en O(m) pour Y, alors que la version X est en O(1). D'un point de vue implémentation, cela nécessite pour chaque calcul la création de cette table, c'est lourd.
Mais il est clair que selon ta définition ton algo est très utile pour les cas favorables ... d'ailleurs que donnerait ton algo pour des nombres codés en base 2 ?
-----