Schönhage-Strassen : explications ?

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
mivan
Messages: 8
Enregistré le: 18 Jan 2011, 10:40

Schönhage-Strassen : explications ?

par mivan » 18 Jan 2011, 10:50

Bonjour à tous,

Je dois implémenter une méthode de calcul de Schönhage-Strassen.
Mon soucis, c'est que je ne suis pas mathématicien et que tout ce que
je lis est assez flou pour moi.

J'ai bien compris la méthode pour des nombres à 2 chiffres. On a n=2
ce qui donne 2n - 1 = 3

45 * 23 = 4 * 2 / 4*3+2*5 / 3*5
Ce qui donne : 08 22 15
On garde le 5
On ajoute le 1 au 2 -> 3
On ajoute le 2 au 8 -> 10
Soit 1035

Maintenant, pour des nombres à 3 chiffre, je ne vois pas :
453 * 861 (n=3 --> 2n-1 = 5)
Avec la méthode de découpage, on obtient : 32 / 64 / 30 / 23 / 03
390 033
On garde le 3 à droite
0 + 3 = 3 -> j'ai obtenu les 2 derniers chiffres....
je trouve pas comment calculer le reste.

Si quelqu'un s'y connait et voudrait bien me donner un petit coup
de main. Merci beaucoup d'avance.

Vinko



Doraki
Habitué(e)
Messages: 5021
Enregistré le: 20 Aoû 2008, 11:07

par Doraki » 18 Jan 2011, 12:25

Ton 30 au milieu est faux.
4*1+5*6+3*8 = 4+30+24 = 58

mivan
Messages: 8
Enregistré le: 18 Jan 2011, 10:40

par mivan » 18 Jan 2011, 12:50

Ahh ! OK, il faut croiser les paires 2 à 2.

Donc, j'obtiens :

32 64 58 23 03

Je garde le dernier 3
-> J'additionne le 0 et le 3 = 3
-> J'additionne le 2 et le 8 = 0 (et je garde le 1 de la retenue)
-> Je prends le 5 + 1 (de la retenue) que j'ajoute à 4 = 0 (je garde le 1)
-> Ensuite 2 + 6 + 1 = 9
-> Et le 3

--> 390 033

Merci pour cet aiguillage !

VinkoB

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 18 Jan 2011, 20:46

Salut,
Je doit être un peu con, mais je fait pas bien la différence entre la "Méthode de Schönhage-Strassen" et... la méthode qu'on m'a apris dans le primaire... :cry:
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

mivan
Messages: 8
Enregistré le: 18 Jan 2011, 10:40

par mivan » 18 Jan 2011, 21:58

C'est une question de rapidité d'exécution.

Je t'explique à ma façon, en français :
453 * 861 = 390 033

Ligne 1
1 * 3
1 * 5
1 * 4
Ligne 2 (décalage de 10)
6 * 3 = 18 -> pose 8 / retient 1
6 * 5 = 30 -> j'ajoute la retenue : 31 -> pose 1 / retient 3
6 * 4 = 24 -> j'ajoute la retenue : 27
Ligne 3 (décalage de 100)
8 * 3 = 24 -> pose 4 / retient 2
8 * 5 = 40 -> j'ajoute la retenue : 42 -> pose 2 / retient 4
8 * 4 = 32 -> j'ajoute la retenue : 36

J'obtiens
453
+ 27180
+362400

Recalcul : 3 + 0 + 0 = 3
5 + 8 + 0 = 13 -> pose 3 / retient 1
4+1+4 = 9 / 9 +1 = 10 je pose 0 et retiens 1
7+2 = 9 -> 9+1 = 10 -> pose 0 retient 1
2+6 = 6 -> 8+1 = 9
3

3 9 0 0 3 3

J'ai fait plein d'opérations

Avec S-S, c'est plus rapide :
453
*861

4 * 8 = 32
4 * 6 + 8 * 5 = 64
4 * 1 + 5 * 6 + 8 * 3 = 58
5 * 1 + 6 * 3 = 23
3 * 1 = 03

32 64 58 23 03

Ensuite, tu garde le dernier chiffre de droite et tu cumules les 2 d'avant :
3
0 + 3 = 3
2 + 8 = 10 -> pose 0 / garde 1
5 + 4 (+1) = 10 -> pose 0 / garde 1
6 + 2 (+1) = 9
3

3 9 0 0 3 3

Certes, c'est pas super flagrant sur des 3 * 3 mais essaye avec 6 * 6 et c'est
déjà plus visible.

J'espère que ma démonstration a été assez claire.

VinkoB

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 18 Jan 2011, 22:36

Bon, on va dire que je ne suis que trés moyennement convaincu :
On fait trés exactement les mêmes multiplications dans les deux cas et la seule différence réside dans l'ordre dans lesquelles on fait les additions : il y a peut-être légèrement moins de retenues (dans les additions) avec la deuxième façon de faire la somme, mais ça me parrait pas totalement évident.
Par exemple dans ton calcul de :
4 * 1 + 5 * 6 + 8 * 3 = 58
tu ne détaille pas les retenues nécessaires à faire cette addition alors que dans la méthode "primaire" tu as détaillé tout les calculs de retenue.
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 18 Jan 2011, 22:52

Il me semble que, dans tout les cas, on fait ces calculs là :

et que la seule différence réside dans l'ordre dans lequel on ajoute les différentes colonnes :
La méthode "primaire" consiste à calculer les "sous totaux" entre chaque traits alors que la "Méthode machin-chose" consiste à ajouter toute la colonne d'un coup : je vois vraiment pas de preuve que cela permet forcément de limiter le nombre de retenues dans les additions et vu que c'est la seule différence (dans tout les cas, on ajoute autant de nombres qui sont d'ailleurs... les mêmes...)
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

mivan
Messages: 8
Enregistré le: 18 Jan 2011, 10:40

par mivan » 19 Jan 2011, 09:25

Bonjour,

Je comprends bien que la méthode ne parait pas très rapide
quand on maîtrise parfaitement la bonne vieille méthode dite
"scolaire".

http://fr.wikipedia.org/wiki/Algorithme_de_multiplication

Les méthodes dites 'rapides' permettent d'économiser des
calculs mais la différence ne se fait vraiment sentir que sur
les très grosses opérations.

Celà dit, toutes les méthodes ont un point commun non
négligeable : il faut connaître ses tables de multiplication....

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 19 Jan 2011, 12:43

mivan a écrit:Les méthodes dites 'rapides' permettent d'économiser des
calculs mais la différence ne se fait vraiment sentir que sur
les très grosses opérations.
Calcule moi donc juste pour voir combien de multiplications et d'adittion demandent ta méthode lorsque l'on fait le produit de deux nombres de 500 chiffres.
Compare ensuite avec la méthode "primaire".
Conclusion.
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Doraki
Habitué(e)
Messages: 5021
Enregistré le: 20 Aoû 2008, 11:07

par Doraki » 19 Jan 2011, 12:49

J'ajouterais que ce que t'es en train de faire c'est absolument pas l'algorithme de Schönhage Strassen

mivan
Messages: 8
Enregistré le: 18 Jan 2011, 10:40

par mivan » 19 Jan 2011, 13:12

Oh oh ! Je ne suis pas mathématicien. Juste curieux.
Et c'est pas moi qui dit que c'est plus rapide, ce sont les
vrais mathématiciens. Y'a d'autres méthode qui sont aussi
très rapides (Karatsuba / Toom par exemple).

VinkoB

mivan
Messages: 8
Enregistré le: 18 Jan 2011, 10:40

par mivan » 19 Jan 2011, 13:13

Doraki a écrit:J'ajouterais que ce que t'es en train de faire c'est absolument pas l'algorithme de Schönhage Strassen


C'est quoi alors ce que je fais ? Il me semblait bien pourtant ? Tu peux expliquer facilement ?

Merci,

VinkoB

Doraki
Habitué(e)
Messages: 5021
Enregistré le: 20 Aoû 2008, 11:07

par Doraki » 19 Jan 2011, 13:53

[url]http://en.wikipedia.org/wiki/Schönhage–Strassen_algorithm[/url]

mivan
Messages: 8
Enregistré le: 18 Jan 2011, 10:40

par mivan » 19 Jan 2011, 13:58

Bonjour Doraki,

J'avais bien vu cette explication mais j'avais trouvé une video qui
faisait ce que j'expliquais ici (mais avec 2 x 2) :

[url]http://wn.com/Schönhage-Strassen_algorithm[/url]

Tu peux m'expliquer clairement les étapes de la multiplication avec
par exemple 789 * 654 ?

Merci d'avance,

Doraki
Habitué(e)
Messages: 5021
Enregistré le: 20 Aoû 2008, 11:07

par Doraki » 19 Jan 2011, 14:09

Cette vidéo, si tu regardes sa description, n'a aucun rapport avec Schonage Strassen.

L'algorithme m'a l'air d'etre expliqué sur wikipedia.
Je ne l'ai jamais regardé en détail je peux pas t'aider plus que ça.

mivan
Messages: 8
Enregistré le: 18 Jan 2011, 10:40

par mivan » 19 Jan 2011, 14:11

Ok, je vais me pencher là dessus. Je vais essayer de trouver
une bibliothèque avec du code source, ce qui est plus parlant
pour moi que des théories mathématiques.

Encore merci,

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 45 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite