データ構造のレビュー - 第 4 章: 配列と行列


パート 1: マトリックス

行列は線形代数で詳しく理解されています。大学院の入学試験では、行列の部分が配列添字 k と < についてよく出題されます。 /span> 1 to n 1 to n 行列の添え字 i と j は通常次のとおりであることに注意してください: 行列の行 i と列 j 間の関係
1 から n であり、配列の添字 k は通常: 0 から n 2 − 1 0 から n^2-1 0n21

  • k と i、j の関係は次のとおりです。 k = n ∗ ( i − 1 ) + j − 1 k=n*(i-1)+j-1 k=n(i1)+j1

パート 1 演習

  1. 配列 A では、各要素の長さは 3 バイトで、行の添字 i の範囲は 1 ~ 8、列の添字 j の範囲は 1 ~ 10 で、最初のアドレスからメモリに連続して格納されます。 SA。配列は行に格納され、要素 A[8][5] の開始アドレスは (C) です。
    A.SA+141
    B.SA+144
    C.SA+222(式 A 85 A_{85} を使用して見つけることができます。85 の前には 74 個の要素があるため、その開始アドレスは次のようになります: S A + 74 ∗ 3 SA+74*3 SA+743
    D.SA+225
  2. 配列 B に 2 次元配列 A[1...m,1...n] が 1 行ずつ格納されているとすると、2 次元配列要素 A[i, 1 次元配列 B の j] は (A) です。
    A.n*(i-1)+j (この質問は、配列 B の添字が 0 から始まることを強調していません。他のオプションと組み合わせると、 A のみ選択できます)
    B.n*(i-1)-j-1 (紛らわしいオプションです。「- j」は間違っているはずです)
    C.i*(j-1)
    D.i*m+i-1

パート 2: 対称行列

対称行列は主対角線の両側のデータが同じです正方行列このため、クラス行列の場合、通常はスペースを節約し、上三角部分 または のデータのみを保存できます。 >下三角部分のデータです。

  • 現時点では配列添字 k行列の行 i と列 j<通常、 a i=4> の関係が満たされます (転置後、上の三角形は下の三角形になります): k 下の三角形 = S i − 1 + j − 1 k 上の三角形 = S j − 1 + i − 1 k_{下の三角}=S_{i-1}+j-1\\k_{上の三角}=S_{j-1}+i-1 k下三角=Si1 +j1k上三角=Sj1 +1
  • 前の式では、配列には通常の行列が格納されます S x = x ∗ n S_x= x*n Sx =バツn、n は行列の総列数です。ここでは上/下三角行列が保存されているためです。 /span> S x = x ∗ ( x + 1 ) 2 S_{x}=\frac{x*(x+1)}{2} を組み合わせる等差数列の合計公式 なので、Sx =2バツ(x+1)

転置の効果を実現するには、上三角行列を配列の列に格納する必要があることに注意してください。 (転置すると、列は行になります)。上記 2 つの式を組み合わせると、次の関係が得られます。
対称行列の配列の添字

パート 2 演習

  1. 圧縮格納方式を採用した対称行列 A があるとします。A11 が行順に先頭要素として格納されます。その格納アドレスは 1 です。各要素はアドレス空間を占有します。すると、A85 のアドレスは ( B)。
    A.23
    B.33 (前にある要素の数: k=8*(8-1)/ 2+5-1=32、アドレスは 1+k*1=33)
    C.18
    D.40

パート 3: 三角行列

三角行列は下三角行列上三角行列

  • 下三角行列: 下三角は重み、上三角はすべて同じです。 (例: すべて 0 または 1)
  • 上三角行列: 上三角は重み、下三角はすべて同じです。 (例: すべて 0 または 1)

このとき、配列には上三角領域と下三角領域に重みを格納するだけでなく、残りの同じデータを記録する位置も追加する必要があります(コピーを保存するだけです)。

  • 下三角行列の要素に対応する配列添字: { k 重み領域 = i ∗ ( i − 1 ) 2 + j − 1 ( i ≥ j ) kは同じです Area = n ∗ ( n + 1 ) 2 ( i < j ) \begin{cases}k_{weight area}=\frac{i*(i-1)}{2}+j-1&( i \ geq j)\\\\k_{同じ面積}=\frac{n*(n+1)}{2}&(i < j)\end{件} k权值区域=2i(i1) +j1k相同区域=2n(n+ 1) iji<;j
  • 上三角行列の要素に対応する配列添字: { k 重み領域 = j ∗ ( j − 1 ) 2 + i − 1 ( i ≤ j ) kは同じです Area = n ∗ ( n + 1 ) 2 ( i > j ) \begin{cases}k_{weight area}=\frac{j*(j-1)}{2}+i-1& ( i \ leq j)\\\\k_{同じ面積}=\frac{n*(n+1)}{2}&(i > j)\end{件} k权值区域=2j(j1) +1k相同区域=2n(n+ 1) iji>j

重み領域の最大添字は次のとおりです。 k n n = n ∗ ( n − 1 ) 2 + n − 1 = n ∗ ( n + 1 ) 2 − 1 ( i = j = n ) k_{nn}=\frac{n*(n-1)}{2}+n-1=\frac{n*(n+1)}{2}-1 \quad(i = j=n) k =2n(n1) +n1=2n(n+ 1) 1i=j=n

パート 3 演習

  1. n 次の下三角行列 A が圧縮され、列優先の 1 次元配列 B[1...n(n+1)/2+1] に格納される場合、非-三角行列 A を B[k] に格納 ゼロ要素 aij (1<=i, j < =n) の添字 i、j、k の対応関係は (B )。
    A.(j-1)(2n-j+1)/2+i-j
    B.(j-1)(2n-j+2) /2+i-j+1 (配列 B の添え字は 1 から始まるとの質問なので、1 を引く必要はありません)
    C .(j- 1)(2n-j+2)/2+i-j
    D.(j-1)(2n-j+ 1)/2+i-j-1< a i=8> [分析] 下の三角形は列優先の順序で圧縮されますおよび上の三角形は圧縮されます行優先< a i=12> は同じであり、等差数列の逆和を行う必要があります。具体的な処理を下図に示します。質問は列ごとに圧縮されています。上の三角形は行ごとに圧縮する必要があり、転置、つまり交換するだけで済みます。i と j の位置)

    下三角柱の圧縮導出

パート 4: 三重対角行列

三重対角行列は「爪」行列またはバンド行列とも呼ばれます。その特徴は、 ∣ i − j ∣ > 1 |i-j|>1 ij>1 A i j = 0 A_{ij}=0 ij =0
三重対角行列構造と圧縮添字 k

パート 4 演習

  1. 100 次の三重対角行列があります M M M,その元素 m i j m_{ij} メートルij (1<= i, j<=100) は行から先に圧縮され、添字が 0 から始まる 1 次元配列に格納されます。 N N N中。元素 m 30 , 30 m_{30,30} メートル3030 在N中的下标是(B)。
    A.86
    B.87(套公式:2*30+30-3=87)
    C.88
    D.89

パート 5: スパース行列

行列内の非ゼロ要素の数が行列の数よりはるかに少ない場合行列要素 a> の場合、それを疎行列と呼びます。
スパース行列には、トリプルクロスの 2 つの一般的な圧縮保存方法があります。リンクされたリスト。以下ではトリプルを中心に紹介し、クロスリンクリストについては図の部分で紹介します。
スパース行列に対応するトリプレット
トリプレットは、ある行列を別の行列に冗長変換するように見えますが、元の行列の次元が非常に大きくても疎行列である場合、トリプレットは非常に効果的です。圧縮データ、トリプレット自体はさらに 1 要素の配列に圧縮できます。
スパース行列 は、圧縮して保存すると、ランダム アクセス特性が失われる ことに注意してください。

パート 5 演習

  1. 疎行列 - 一般的な圧縮保存方法には、(C) という 2 つの方法があります。
    A. 2 次元配列と 3 次元配列
    B. トリプレットとハッシュ
    C. トリプレットとクロス リンク リスト
    D. ハッシュと相互リンク リスト

  2. には、10 個の非 0 要素を含む 100×90 のスパース行列があります。各整数が 2 バイトを占めると仮定します。スパース行列をトリプル テーブル データに圧縮するときは、data[ 0].i, data[0] を使用します。 ].j、data[0].v はそれぞれ、行列の行、列、非ゼロ要素の数を格納します。必要な合計バイト数は ( B
    < a i=2>)。 A.20
    B.66 (質問の説明に罠があります。合計行が保存されます)配列添字 0. 数値、列の合計数、ゼロ以外の要素の合計数、合計 6 バイトが消費されます)
    C.18000
    D.33


まとめ

行列部分には主に 4 種類の行列があり、行列データを配列に圧縮した際に、異なる行列要素に対応する配列添字がスコアに占める割合が高くないことが検査ポイントとなります。
マトリックスマインドマップ

おすすめ

転載: blog.csdn.net/qq_50571974/article/details/126633835