দুটি ২D অ্যারে (ম্যাট্রিক্স) গুণ করার অ্যালগরিদম যেখানে প্রথম ম্যাট্রিক্সের কলাম সংখ্যা = দ্বিতীয় ম্যাট্রিক্সের রো সংখ্যা হলে।
নিয়ম
যদি A (m×n) এবং B (n×p) হয়, তবে A×B হবে (m×p) মাপের।
উদাহরণ
A (5×4) × B (4×6) = C (5×6)
সমাধান
const multiplyMatrices = (a, b) => {
// ভ্যালিডেশন
if (!Array.isArray(a) || !Array.isArray(b) || !a.length || !b.length) {
throw new Error('Arguments must be 2D arrays');
}
const rowsA = a.length;
const colsA = a[0].length;
const colsB = b[0].length;
// ডাইমেনশন চেক
if (b.length !== colsA) {
throw new Error('Columns of A must equal rows of B');
}
// রেজাল্ট ম্যাট্রিক্স ইনিশিয়ালাইজ (০ দিয়ে)
const result = Array.from({ length: rowsA }, () =>
Array(colsB).fill(0)
);
// ম্যাট্রিক্স গুণ
for (let i = 0; i < rowsA; i++) {
for (let j = 0; j < colsB; j++) {
for (let k = 0; k < colsA; k++) {
result[i][j] += a[i][k] * b[k][j];
}
}
}
return result;
};
// টেস্ট
const a = [
[1, 2, 3, 1],
[4, 5, 6, 1],
[7, 8, 9, 1],
[1, 1, 1, 1],
[5, 7, 2, 6]
]; // 5×4
const b = [
[1, 4, 7, 3, 4, 6],
[2, 5, 8, 7, 3, 2],
[3, 6, 9, 6, 7, 8],
[1, 1, 1, 2, 3, 6]
]; // 4×6
console.log(multiplyMatrices(a, b));
// 5×6 ম্যাট্রিক্স
আউটপুট ব্যাখ্যা
প্রতিটি এলিমেন্ট C[i][j] = Σ(A[i][k] × B[k][j]) কেইk=0 থেকে n-1 পর্যন্ত।
অপ্টিমাইজেশন টিপস
- ক্যাশ-ফ্রেন্ডলি লুপ অর্ডার (i, k, j)
- Strassen অ্যালগরিদম বড় ম্যাট্রিক্সের জন্য (O(n²·⁸¹))
- WebGL/GPU অ্যাক্সিলারেশন খুব বড় ম্যাট্রিক্সের জন্য
উৎপাদন
[ [ 15, 33, 51, 37, 34, 40 ], [ 33, 78, 123, 85, 76, 88 ], [ 51, 123, 195, 133, 118, 136 ], [ 7, 16, 25, 18, 17, 22 ], [ 31, 73, 115, 88, 73, 96 ] ]