JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで行列の対角線上の要素の積を求める方法

ここでは、正方行列を表す2次元配列を例に考えてみましょう。

const arr = [
    [1, 3, 4, 2],
    [4, 5, 3, 5],
    [5, 2, 6, 4],
    [8, 2, 9, 3]
];

この配列を受け取り、行列の主対角線(左上から右下にかけての対角線)上に存在する要素の積を返す関数を作成する必要があります。

問題の確認

この行列の場合、主対角線上にある要素は次のとおりです。

1, 5, 6, 3

したがって、期待される出力は次のようになります。

1 × 5 × 6 × 3 = 90

コード例

以下がその実装コードです。

const arr = [
    [1, 3, 4, 2],
    [4, 5, 3, 5],
    [5, 2, 6, 4],
    [8, 2, 9, 3]
];

const diagonalProduct = arr => {
    let product = 1;
    for(let i = 0; i < arr.length; i++){
        for(let j = 0; j < arr[i].length; j++){
            if(i === j){
                product *= arr[i][j];
            };
        };
    };
    return product;
};

console.log(diagonalProduct(arr));

実行結果

コンソールには以下のように出力されます。

90

コードの解説

この関数の仕組みはシンプルです。二重のforループで行列のすべての要素を走査し、行インデックス i と列インデックス j が等しい場合(つまり i === j のとき)、その要素は主対角線上にあるため、積に掛け合わせていきます。

より効率的な書き方

実は、対角要素だけが必要な場合は、内側のループは不要です。行番号と列番号が一致する位置のみを参照すればよいため、次のように1つのループで簡潔に書くことができます。

const diagonalProduct = arr => {
    let product = 1;
    for(let i = 0; i < arr.length; i++){
        product *= arr[i][i];
    };
    return product;
};

この書き方なら計算量が O(n) になり、行列全体を走査する O(n²) のアプローチよりも効率的です。特に大きな行列を扱う場合には、この最適化が有効になります。

  1. JavaScriptで配列を空にする方法まとめ【3つの手法と使い分けのポイント】

    JavaScriptで配列を空にする(初期化する)方法は複数あります。それぞれの手法には特徴や注意点があり、状況に応じて適切に使い分けることが重要です。この記事では、代表的な3つの方法と、それぞれのメリット・デメリットを詳しく解説します。まず、以下のような配列があると仮定します。let arr = [1, test, {}, 123.43];方法1:新しい空の配列で置き換えるarr = [];変数arrに新しい空の配列を再代入する方法です。最もシンプルかつ高速な手法として知られています。ただし注意点として、元の配列への参照がプログラムの他の場所に存在する場合、それらの参照は自動的に更新されませ

  2. JavaScriptの基本配列メソッド解説!push・pop・shift・unshift・spliceの使い方を実例付きで紹介

    JavaScriptには、配列を操作するための便利な組み込みメソッドが数多く用意されています。その中でも特によく使われるのが、要素の追加や削除を行う以下の5つの基本メソッドです。 JavaScriptの主要な配列メソッド一覧 メソッド説明 Array.push()配列の末尾に要素を追加します。 Array.pop()配列の末尾から要素を取り除きます。 Array.unshift()配列の先頭に要素を追加します。 Array.shift()配列の先頭から要素を取り除きます。 Array.splice()配列内の任意の位置で要素の追加・削除を行います。 これらのメソッドは、配列の