Il existe de nombreuses façons différentes d'expliquer la multiplication matricielle. Je vais m'en tenir à une seule figure car je pense que la plupart des gens ici la connaissent (et la figure est très descriptive). Si vous voulez des informations plus détaillées, je vous suggère de visiter l' article Wikipedia ou l'explication sur WolframMathWorld .
Explication simple:
Supposons que vous ayez deux matrices, A et B , où A est 3 par 2 et B est 2 par 3. Si vous effectuez une multiplication matricielle sur ces matrices, AB ou BA, vous obtiendrez les résultats ci-dessous:
Défi:
Implémentez la multiplication matricielle symbolique dans votre langue. Vous devez prendre deux matrices en entrée, où chaque élément des matrices est représenté par un caractère ASCII non blanc (points de code 33-126). Vous devez sortir le produit de ces matrices.
Règles concernant la sortie:
Un produit de deux entrées ne doit avoir aucun symbole entre les deux. Il est ab
, non a*b
, a·b
, times(a,b)
ou quelque chose de similaire. Ce n'est aa
pas le cas a^2
.
La somme des termes doit avoir un espace (code ASCII point 32) entre les deux. Ce n'est a b
pas le cas a+b
, plus(a,b)
ou quelque chose de similaire.
La justification de ces deux règles est la suivante: tous les caractères non blancs sont autorisés comme symboles dans les matrices, donc les utiliser comme symboles mathématiques serait désordonné. Donc, ce que vous pourriez normalement écrire a*b+c*d
sera ab cd
.
Vous pouvez choisir l'ordre des conditions. ab cd
, dc ab
et cd ba
parlent mathématiquement de la même manière, vous pouvez donc également choisir l'ordre ici. L'ordre n'a pas besoin d'être cohérent tant qu'il est mathématiquement correct.
Règles concernant le formatage matriciel:
Une matrice peut être entrée dans le format de votre choix, à l'exception d'une seule chaîne sans délimiteur entre les lignes (c'est parce que la sortie serait complètement foirée). Les deux matrices doivent être entrées au même format. Tous les exemples ci-dessous sont des moyens valides d'entrer et de sortir une matrice.
"ab;cd" <- This will look awful, but it's still accepted.
"a,b\nc,d"
[[a,b],[c,d]]
[a, b]
[c, d]
Je suis conscient que cela autorise beaucoup de formats qui auront l'air désordonnés, mais le défi consiste à multiplier les matrices, pas à formater la sortie.
Règles générales:
- Vous pouvez supposer une entrée valide. La multiplication matricielle sera toujours possible avec les dimensions données.
- Il n'y aura que deux matrices.
- Vous pouvez supposer que les matrices ne sont pas vides
- Les fonctions intégrées sont acceptées (mais probablement un peu lourdes en raison des exigences de formatage).
- Vous pouvez bien sûr utiliser des caractères d'échappement dans l'entrée si nécessaire (
\'
au lieu de'
). - Toute méthode d'entrée et de sortie standard est OK .
Cas de test:
Les deux matrices d'entrée sont affichées avec une ligne vide entre les deux. La sortie est affichée après Output:
. Lorsqu'il y a deux matrices de sortie, c'est juste pour montrer d'autres sorties qui seraient acceptées.
Cas de test # 1
Inputs:
[a]
[b]
Output:
[ab]
[ba] <- Also OK
Cas de test # 2
Inputs:
[a, b]
[1, 4]
[y, {]
[%, 4, 1]
[a, b, c]
Output:
[a% ba, a4 bb, a1 bc]
[1% 4a, 14 4b, 11 4c]
[y% {a, y4 {b, y1 {c]
Cas de test n ° 3:
Inputs:
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 1, 2, 3]
[4, 5, 6, 7]
[a]
[b]
[c]
[d]
Output:
[1a 2b 3c 4d]
[5a 6b 7c 8d]
[9a 1b 2c 3d]
[4a 5b 6c 7d]
[d4 c3 b2 a1] <-- Also OK
[d8 c7 b6 a5]
[1b 9a c2 3d]
[a4 b5 d7 6c]
Si votre réponse aux règles exigeant ab cd
au lieu de a*b+c*d
est: vous devez éviter les formats d'entrée / sortie encombrants , alors je voudrais noter que les formats d'entrée et de sortie sont très flexibles. Le fait que vous ne puissiez pas utiliser *
et +
pour les produits et les sommes pourrait rendre plus difficile l'utilisation d'un simple intégré, mais je ne considère pas cette chose négative.