Dinamikus
programozás I
Feladatok:
1. Háromszög feladat (lásd
Kása Tanár Úr 8. előadását)
2. Adott n
mátrix,
melyek legyenek rendre A1,
A2, ..., An és
adottak továbbá a méreteik: d[0]
x d[1],
d[1] x d[2], ..., d[n-1] x d[n]. Írjunk programot, mely
meghatározza
a mátrixsor azon
zárójelezését, mely szerint
minimális
számú elemi szorzást végezzünk, ha a
mátrixokat össze akarjuk szorozni.
Pszeudokód:
//
inicializálás
minden
i =1 .. n
végezd
c[i][i] = 0
vége
minden
// a tömb
feltöltése
minden
i = n-1 .. 1, -1 végezd
minden j = i+1 .. n végezd
c[i][j] = MIN
minden k = i .. j-1 végezd
ha
c[i][k] + c[k+1][j] + d[i-1]*d[k]*d[j] < c[i][j]
akkor
c[i][j] = c[i][k]+c[k+1][j]+d[i-1]*d[k]*d[j]
c[j][i] = k
vége ha
vége minden
vége minden
vége
minden
kiírás
c[1][n]
zárójelezés(
i, j )
ha i = j akkor kiír ‘A’,i
különben
kiír ‘(’
zárójelezés( i, c[j][i] )
// rekurzív hívás
kiír ‘*’
zárójelezés( c[j][i]+1, j ) // rekurzív
hívás
kiír ‘)’
vége ha
vége
zárójelezés