কম্পিউটার টিউটোরিয়াল

ম্যাট্রিক্স গুণ অ্যালগরিদম - JavaScript

দুটি ২D ম্যাট্রিক্স গুণ করার স্ট্যান্ডার্ড অ্যালগরিদম (ট্রিপল নেস্টেড লুপ)।

নিয়ম

A (m×n) × B (n×p) = C (m×p)

C[i][j] = Σ A[i][k] × B[k][j] (k=0 to n-1)

সমাধান

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;
};

// টেস্ট (5×4) × (4×6) = (5×6)
const a = [
  [1, 2, 3, 1],
  [4, 5, 6, 1],
  [7, 8, 9, 1],
  [1, 1, 1, 1],
  [5, 7, 2, 6]
];

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]
];

console.log(multiplyMatrices(a, b));

অপ্টিমাইজেশন টিপস

  • লুপ অর্ডার i,k,j: ক্যাশ লোকালিটি বেড়ায় (Row-major order)
  • Block/Tile মাল্টিপ্লিকেশন: বড় ম্যাট্রিক্সের জন্য
  • Strassen: O(n²·⁸¹) - বড় ম্যাট্রিক্সের জন্য
  • WebAssembly/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 ] 
]
  1. জাভাস্ক্রিপ্ট Let কীওয়ার্ড

  2. জাভাস্ক্রিপ্টে for...of লুপ ব্যাখ্যা

  3. জাভাস্ক্রিপ্টে Const এবং Let এর পার্থক্য

  4. জাভাস্ক্রিপ্টে for...in স্টেটমেন্ট ব্যাখ্যা