Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

lancano mnozenje matrica-VRLO HITNO

[es] :: C/C++ programiranje :: lancano mnozenje matrica-VRLO HITNO

[ Pregleda: 3105 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

hamburg
fgdfg fdssg

Član broj: 80862
Poruke: 1
*.crnagora.net.



Profil

icon lancano mnozenje matrica-VRLO HITNO11.01.2006. u 22:08 - pre 222 meseci
prvi put sam ovdje,ali se ipak nadam da ce mi neko pomoci!
imam problem sa kodom ,koji cu u cjelosti navesti.
mislila sam da mi neko od vas samo objasni na koji nacin se biraju vrijednosti matrice A i na koji nacin radi funkcija koja stampa redosljed mnozenja matrica!
znaci: POTREBNO MI JE SAMO OBJASNJENJE RADA FUNKCIJE STAMPA i na koji
nacin se dobijaju elementi matrice a...
zao mi je sto vas mucim,ali stvarno mi je hitno!!!
evo teksta zadatka:



/* Date su matrice M1, M2, ..., Mn cije su dimenzije redom D0xD1,
D1xD2, ..., Dn-1xDn. U proizvodu M1xM2x ... xMn moguce je postaviti
zagrade na razlicite nacine, a rezultujuca matrica ne zavisi od
rasporeda zagrada. Za dati niz D0, D1 ..., Dn odrediti raspored
zagrada tako da broj mnozenja potrebnih za izracunavanje proizvoda
M1xM2x ... xMn bude minimalan.
Broj mnozenja u proizvodu M1xM2 iznosi D0xD1xD2.
Stampati miminalan broj mnozenja i kako se on realizuje.*/

/* Rjesenje: Dinamicko programiranje
Neka b[j] oznacava minimalnu cijenu mnozenja matrica Mi x...X Mj.
Tada je: b[j] = min(b[k]+b[k+1][j]+dxd[k]xd[j]), i<=k<j i
b[j] = 0, ako je i=j. Brojeve racunamo prvo za i=j, pa za i-j = 1, itd.


a evo i koda:

#include <stdio.h>

#define DIM 30

int a[DIM+1][DIM+1], b[DIM+1][DIM+1], d[DIM+1];

/***************************************************************************/

void Unos_Niza(int *n, int *x)
{
/*Unos_Niza*/
int i ;
printf("Unesite broj elemenata niza(broj matrica koje se mnoze):");
scanf("%d", n);
printf("Unesite elemente niza (dimenzije matrica):");
for(i=0;i <= *n;i++)
scanf("%d", &x);
}

/**************************************************************************/

void Stampa(int p, int q)
/* Rekurzivno stampanje redosleda stampanja matrica.*/
{
if (q == p)
printf("%s%d", "M",q);
else
{
printf("(");
Stampa(p,a[p][q]);
printf(")x(");
Stampa(a[p][q]+1,q);
printf(")");
}
}

/**************************************************************************/

void PopuniMatrice(int n)
{
int i,j,k,l;

for (i=0;i<n;i++)
for (j=0;j<n;j++)
b[j]=0;
for (l=1; l <= n-1; l++) /* l predstavlja razliku i-j */
for (i=0;i<n-1;i++)
{
j = i+l;
b[j] = b + b[i+1][j] + d*d[i+1]*d[j+1];
a[j] = i;
for (k= i+1; k<= j-1;k++)
if (b[j] > b[k]+b[k+1][j]+d*d[k+1]*d[j+1])
{
b[j] = b[k]+b[k+1][j]+d*d[k+1]*d[j+1];
a[j] = k;
}
}
}

/**************************************************************************/


main()
{
int n;

Unos_Niza(&n,d);
PopuniMatrice(n);
printf("Minimalan broj mnozenja je:%d\n", b[0][n-1]);
Stampa(0,n-1);
putchar('\n');
}
 
Odgovor na temu

[es] :: C/C++ programiranje :: lancano mnozenje matrica-VRLO HITNO

[ Pregleda: 3105 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.