행렬 곱셈을 설명하는 방법에는 여러 가지가 있습니다. 나는 대부분의 사람들이 그것에 익숙하다고 생각하기 때문에 하나의 그림을 고수 할 것입니다 (그리고 그림은 매우 묘사 적입니다). 더 자세한 정보를 원하시면 Wikipedia-article 또는 WolframMathWorld에 대한 설명을 방문하십시오 .
간단한 설명 :
두 행렬이 있다고 가정 와 B를 어디에서, A는 3 별 2이고, B는 2로-3입니다. AB 또는 BA 행렬에 행렬 곱셈을 수행하면 다음과 같은 결과를 얻을 수 있습니다.
도전:
귀하의 언어로 기호 행렬 곱셈을 구현하십시오 . 행렬의 각 요소는 공백이 아닌 ASCII 문자로 표시됩니다 (코드 포인트 33-126). 이 행렬의 곱을 출력해야합니다.
출력에 관한 규칙 :
두 항목의 제품 사이에 기호가 없어야합니다. 그건 ab
아니, a*b
, a·b
, times(a,b)
비슷하거나 뭔가. 그것은이다 aa
,하지 a^2
.
항의 합계는 사이에 공백 (ASCII 코드 포인트 32)이 있어야합니다. 그건 a b
아닌 a+b
, plus(a,b)
유사하거나 뭔가.
이 두 규칙의 이론적 근거는 다음과 같습니다. 공백이 아닌 모든 문자는 행렬에서 기호로 사용할 수 있으므로 수학 기호로 사용하는 것이 어려울 수 있습니다. 따라서 일반적으로 쓸 수 a*b+c*d
있는 것은 ab cd
입니다.
용어의 순서를 선택할 수 있습니다. ab cd
, dc ab
그리고 cd ba
당신이 너무 여기에 순서를 선택할 수 있도록 수학적으로, 같은 말하기된다. 순서가 수학적으로 정확하다면 일관성이있을 필요는 없습니다.
행렬 형식과 관련된 규칙 :
행 사이에 구분자가없는 단일 문자열을 제외하고 원하는 형식으로 행렬을 입력 할 수 있습니다 (출력이 완전히 엉망이기 때문입니다). 두 행렬 모두 같은 형식으로 입력해야합니다. 아래의 모든 예제는 행렬을 입력하고 출력하는 유효한 방법입니다.
"ab;cd" <- This will look awful, but it's still accepted.
"a,b\nc,d"
[[a,b],[c,d]]
[a, b]
[c, d]
나는 이것이 복잡한 것처럼 보이는 많은 형식을 허용한다는 것을 알고 있지만 문제는 출력 형식을 지정하지 않고 행렬을 곱하는 것입니다.
일반적인 규칙:
- 유효한 입력을 가정 할 수 있습니다. 주어진 차원에서 행렬 곱셈은 항상 가능합니다.
- 두 개의 행렬 만 있습니다.
- 행렬이 비어 있지 않다고 가정 할 수 있습니다.
- 내장 함수가 허용되지만 형식 요구 사항으로 인해 약간 번거로울 수 있습니다.
- 물론 필요한 경우 입력
\'
대신 이스케이프 문자를 사용할 수 있습니다 ( 대신'
). - 모든 표준 입력 및 출력 방법은 정상 입니다.
테스트 사례 :
두 입력 행렬은 사이에 빈 줄로 표시됩니다. 출력은 다음에 표시 Output:
됩니다. 두 개의 출력 행렬이있는 경우 허용되는 다른 출력 만 표시합니다.
테스트 사례 # 1
Inputs:
[a]
[b]
Output:
[ab]
[ba] <- Also OK
테스트 사례 # 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]
테스트 사례 # 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]
요구에 대한 규칙에 응답하는 경우 ab cd
대신이 a*b+c*d
있다 : 당신은 성가신 입력 / 출력 형식을 피해야한다 , 그때는 입력 및 출력 형식은 매우 유연합니다 싶습니다. 사실은 당신이 사용할 수없는 *
및 +
제품과 합계 것이 어려워 내장 된 간단한을 사용할 수 있도록 수도 있지만 내가 부정적인 일을 생각하지 않는다.