Es gibt viele verschiedene Möglichkeiten, die Matrixmultiplikation zu erklären. Ich bleibe bei einer einzigen Figur, da ich glaube, dass die meisten Leute hier damit vertraut sind (und die Figur ist sehr beschreibend). Wenn Sie detailliertere Informationen wünschen, empfehle ich Ihnen, den Wikipedia-Artikel oder die Erklärung zu WolframMathWorld zu besuchen .
Einfache Erklärung:
Angenommen, Sie haben zwei Matrizen, A und B , wobei A 3 mal 2 und B 2 mal 3 ist. Wenn Sie eine Matrixmultiplikation mit diesen Matrizen durchführen, entweder AB oder BA, erhalten Sie die folgenden Ergebnisse:
Herausforderung:
Implementieren Sie die symbolische Matrixmultiplikation in Ihrer Sprache. Sie müssen zwei Matrizen als Eingabe verwenden, wobei jedes Element in den Matrizen durch ein Nicht-Leerzeichen-ASCII-Zeichen dargestellt wird (Codepunkte 33-126). Sie müssen das Produkt dieser Matrizen ausgeben.
Regeln zur Ausgabe:
Ein Produkt aus zwei Einträgen darf keine Symbole dazwischen haben. Es ist ab
, nicht a*b
, a·b
, times(a,b)
oder etwas ähnliches. Ist es aa
nicht a^2
.
Die Summe der Begriffe sollte ein Leerzeichen (ASCII-Code Punkt 32) dazwischen haben. Es ist a b
, nicht a+b
, plus(a,b)
oder etwas ähnliches.
Das Grundprinzip für diese beiden Regeln ist: Alle Zeichen, die keine Leerzeichen sind, dürfen als Symbole in der Matrix verwendet werden, daher wäre ihre Verwendung als mathematische Symbole unübersichtlich. Also, was du normalerweise schreiben könntest, wie a*b+c*d
es sein wird ab cd
.
Sie können die Reihenfolge der Begriffe wählen. ab cd
, dc ab
und cd ba
sind mathematisch gesehen gleich, so dass Sie auch hier die Reihenfolge wählen können. Die Reihenfolge muss nicht konsistent sein, solange sie mathematisch korrekt ist.
Regeln zur Matrixformatierung:
Eine Matrix kann in einem beliebigen Format eingegeben werden, mit Ausnahme einer einzelnen Zeichenfolge ohne Trennzeichen zwischen den Zeilen (dies liegt daran, dass die Ausgabe vollständig durcheinander geraten würde). Beide Matrizen müssen im selben Format eingegeben werden. Alle folgenden Beispiele sind gültige Möglichkeiten zum Eingeben und Ausgeben einer Matrix.
"ab;cd" <- This will look awful, but it's still accepted.
"a,b\nc,d"
[[a,b],[c,d]]
[a, b]
[c, d]
Ich bin mir bewusst, dass dies viele Formate zulässt, die unordentlich aussehen werden, aber die Herausforderung besteht darin, Matrizen zu multiplizieren und die Ausgabe nicht zu formatieren.
Allgemeine Regeln:
- Sie können eine gültige Eingabe annehmen. Eine Matrixmultiplikation ist mit den angegebenen Dimensionen immer möglich.
- Es gibt nur zwei Matrizen.
- Sie können davon ausgehen, dass die Matrizen nicht leer sind
- Eingebaute Funktionen werden akzeptiert (sind aber aufgrund der Formatierungsanforderungen wahrscheinlich etwas umständlich).
- Sie können natürlich bei Bedarf (
\'
anstelle von'
) Escape-Zeichen in der Eingabe verwenden . - Jede Standard-Eingabe- und Ausgabemethode ist in Ordnung .
Testfälle:
Die beiden Eingangsmatrizen werden mit einer Leerzeile dazwischen angezeigt. Die Ausgabe wird nach angezeigt Output:
. Wenn zwei Ausgangsmatrizen vorhanden sind, werden nur andere Ausgänge angezeigt, die akzeptiert würden.
Testfall Nr. 1
Inputs:
[a]
[b]
Output:
[ab]
[ba] <- Also OK
Testfall Nr. 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]
Testfall 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]
Wenn Ihre Antwort auf die Regeln zum Anfordern ab cd
statt a*b+c*d
lautet: Sie sollten umständliche Eingabe- / Ausgabeformate vermeiden , dann möchte ich darauf hinweisen, dass die Eingabe- und Ausgabeformate sehr flexibel sind. Die Tatsache, dass Sie nicht *
und +
für Produkte und Summen verwenden können, könnte es schwieriger machen, ein einfaches eingebautes zu verwenden, aber ich betrachte diese negative Sache nicht.