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

C++でシュトラッセンの行列方程式を覚える簡単な方法


これは、分割統治法に基づく行列乗算アルゴリズムです。 方法。同じサイズの2つの行列を乗算するために使用されます

2つの行列の乗算を見つける-

C++でシュトラッセンの行列方程式を覚える簡単な方法

シュトラッセンのアルゴリズム 乗算を単純化することにより、乗算のオーバーヘッドを削減します。

シュトラッセンのアルゴリズムを使用して行われた乗算は次のとおりです。

C++でシュトラッセンの行列方程式を覚える簡単な方法

M1 =a *(f --h)
M2 =(a + b)* h
M3 =(c + d)* e
M4 =d *(g-e)
M5 =(a + d)*(e + h)
M6 =(b --d)*(g + h)
M7 =(a --c)*(e + f)

これは簡単に覚えることができ、アルゴリズムコードをデコードすることができます。このためにいくつかのルールがあります。最初にこれらの6つのことを覚えておいてください-

  • AHEDを使用する Mの最初の4つの値。
  • 対角乗算を使用する Mの5番目の値。
  • Mの6番目の値には、最後のCR(マット1の最後の列とマット2の最後の行)を使用します。
  • Mの7番目の値には、最初のCR(マット1の最初の列とマット2の最初の行)を使用します。
  • 行の要素を考慮しながらそれらを追加し、列の場合はそれらを減算します。
  • その後、隣接する値を使用して値を更新します。

これらの方法を使用すると、値を簡単に思い出すことができます。


  1. C++での行列の行方向と列方向のトラバーサル

    マトリックスは2つの方法でトラバースできます。行マイズトラバーサルは、最初の行から2番目、というように最後の行まで、各行を1つずつ訪問します。行の要素は、インデックス0から最後のインデックスまで返されます。 列ごとのトラバーサルでは、要素は最初の列から最後の列に順番にトラバースされます。 2DマトリックスではM[i][j]。インデックスiは行を表すために使用され、インデックスjは列を表すために使用されます。行ごとのトラバーサルの場合は、から開始します。 i=0行目および0<=j<最後のインデックス i=1行目および0<=j<最後のインデックス ..... i=最後の行と0<=j<

  2. C++のスパイラルマトリックスIII

    R行とC列の2次元グリッドがあるとすると、東向きの(r0、c0)から開始します。ここで、グリッドの北西の角は最初の行と列にあり、グリッドの南東の角は最後の行と列にあります。このグリッドのすべての位置を訪問するために、時計回りのスパイラル形状で歩きます。グリッドの境界の外側にいるときは、グリッドの外側を歩き続けます(ただし、後でグリッドの境界に戻る場合があります)。グリッドの位置を表す座標のリストを、訪問した順序で見つける必要があります。したがって、グリッドが-のような場合 次に、矢印がパスになります。 これを解決するには、次の手順に従います- dirrを作成:=[[0,1]、[