Bei der Verarbeitung von n×n-Matrizen, bei denen viele Eintrage gleich 0
sind, ist es fur große n sinnvoll, statt eines 2-dimensionalen Arrays mit
Eintr¨agen vom Typ double drei eindimensionale Arrays zu verwenden.
Genauer verwendet man fur eine quadratische Matrix mit ¨ m Eintr¨agen,
die ungleich 0 sind,
• ein Array I vom Typ int fur die Zeilennummern der Eintr age ungleich 0,
• ein Array J vom Typ int fur die Spaltennummern der Eintrage ungleich 0 und
• ein Array W vom Typ double fur die Eintrage ungleich 0.
Fur die Matrix
M =
2.5 0.0 1.3
0.0 0.0 2.7
1.2 0.0 0.0
mit m = 4 wurde man zum Beispiel die folgenden drei eindimensionalen ¨
Arrays erhalten:
• I = [1, 1, 2, 3]
• J = [1, 3, 3, 1]
• W = [2.5, 1.3, 2.7, 1.2]
schreiben Sie ein Programm, welches eine Funktion/Methode implementiert, welche zwei n × n-Matrizen, die jeweils als drei ein dimensionale Arrays vorliegen, miteinander multipliziert. Das Produkt derbeiden Matrizen soll wieder direkt in drei ein dimensionalen Arrays abgelegt werden.
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]!=0)
{
I1[k]=i;
J1[k]=j;
W1[k]=a[i][j];
k++;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(b[i][j]!=0)
{
I2[m]=i;
J2[m]=j;
W2[m]=b[i][j];
m++;
}
}
}
l=n*n;
int p = 1;
auto start = high_resolution_clock::now();
printf("\noutput of c \nThe values of C are \n");
;
for (int f = 0; f<l ; f++)
{
W3[f]=0;
}
for (int f =0; f<k ; f++)
{
for (int g=0; g<m; g++)
{
if (J1[f] == I2[g])
{
int z=0;
for(int a = 0 ; a<p ; a++)
{
if((I1[f]==I3[a])&& (J2[g]== J3[a]))
{
W3[a]+=W1[f] * W2[g];
z++;
}
}
if(z == 0)
{
I3[p]=I1[f] ;
J3[p]=J2[g] ;
W3[p]=W1[f]*W2[g];
p++;
}
}
}
}
erst diese program geht nur für 100 n zahl. uber 100 diese Programm rennt nicht.
kann ich die program mit einer anderen methoden schaffen?