มีหลายวิธีในการอธิบายการคูณเมทริกซ์ ฉันจะยึดติดกับร่างเดียวเพราะฉันเชื่อว่าคนส่วนใหญ่ที่นี่คุ้นเคยกับมัน (และตัวเลขนั้นอธิบายได้ดีมาก) หากท่านต้องการข้อมูลรายละเอียดเพิ่มเติมผมขอแนะนำให้คุณไปที่วิกิพีเดียบทความหรือคำอธิบายในWolframMathWorld
คำอธิบายง่ายๆ:
สมมติว่าคุณมีเมทริกซ์สองตัวคือAและBโดยที่Aคือ 3-by-2 และBคือ 2-by-3 หากคุณทำการคูณเมทริกซ์เหล่านี้กับเมทริกซ์ABหรือBAคุณจะได้ผลลัพธ์ด้านล่าง:
ท้าทาย:
ใช้การคูณเมทริกซ์สัญลักษณ์ในภาษาของคุณ คุณจะต้องใช้เมทริกซ์สองตัวเป็นอินพุตซึ่งแต่ละองค์ประกอบในเมทริกซ์จะถูกแทนด้วยอักขระ ASCII ที่ไม่ใช่ whitespace (รหัสคะแนน 33-126) คุณต้องเอาท์พุทผลิตภัณฑ์ของเมทริกซ์เหล่านี้
กฎเกี่ยวกับผลลัพธ์:
ผลิตภัณฑ์ของสองรายการจะต้องไม่มีสัญลักษณ์ใด ๆ ในระหว่าง มันab
ไม่ได้a*b
, a·b
, times(a,b)
หรือสิ่งที่คล้ายกัน มันไม่ได้aa
a^2
ผลรวมของเงื่อนไขควรมีช่องว่าง (รหัส ASCII จุด 32) ในระหว่าง มันa b
ไม่a+b
, plus(a,b)
หรือสิ่งที่คล้ายกัน
เหตุผลสำหรับกฎทั้งสองนี้คือ: อนุญาตให้ใช้อักขระที่ไม่ใช่ white space ทั้งหมดเป็นสัญลักษณ์ในเมทริกซ์ดังนั้นการใช้มันเป็นสัญลักษณ์ทางคณิตศาสตร์จะยุ่งเหยิง ดังนั้นสิ่งที่คุณตามปกติสามารถเขียนเป็นจะเป็น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]
ฉันทราบว่านี่ช่วยให้รูปแบบจำนวนมากที่ดูยุ่งเหยิง แต่ความท้าทายนั้นเกี่ยวกับการคูณเมทริกซ์ไม่ใช่การจัดรูปแบบเอาต์พุต
กฎทั่วไป:
- คุณอาจจะถือว่าอินพุตที่ถูกต้อง การคูณเมทริกซ์จะเป็นไปได้เสมอกับขนาดที่กำหนด
- จะมีเพียงสองเมทริกซ์
- คุณอาจคิดว่าเมทริกซ์นั้นไม่ว่างเปล่า
- ฟังก์ชั่นในตัวได้รับการยอมรับ (แต่อาจยุ่งยากเล็กน้อยเนื่องจากข้อกำหนดการจัดรูปแบบ)
- แน่นอนคุณอาจใช้อักขระเลี่ยงในอินพุตถ้าจำเป็น (
\'
แทน'
) - ใด ๆinput และ output วิธีมาตรฐานคือตกลง
กรณีทดสอบ:
เมทริกซ์อินพุตสองรายการถูกแสดงด้วยบรรทัดว่างในระหว่าง 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
เป็น: คุณควรหลีกเลี่ยงรูปแบบอินพุต / เอาท์พุตที่ยุ่งยากดังนั้นฉันต้องการทราบว่ารูปแบบอินพุตและเอาต์พุตมีความยืดหยุ่นมาก ความจริงที่ว่าคุณไม่สามารถใช้งานได้*
และ+
สำหรับผลิตภัณฑ์และผลรวมอาจทำให้ยากต่อการใช้งานบิวท์อินเรียบง่าย แต่ฉันไม่คิดว่าสิ่งที่เป็นลบ