Sunteți pe pagina 1din 1

3.

Submatrice binar maxim


Dndu-se o matrice binar cu m linii i n coloane, determinai o submatrice ptratic de dimensiune
maxim care are toate elementele egale cu 1.
De exemplu, fie matricea binar urmtoare:
0
1
0
1
1

1
1
1
1
1

1
0
1
1
1

0
1
1
1
1

1
0
0
0
1

Submatricea ptratic de dimensiune maxim


care are toate elementele egale cu 1 este:
1
1
1

1
1
1

1
1
1

Algoritmul de rezolvare:
1. Notm cu A[m][n] matricea binar. Subproblemele care vor fi rezolvate constau n determinarea
dimensiunii maxime a unei submatrici ptratice cu toate elementele egale cu 1 care poate fi obinut n
submatricea care are colul din dreapta jos n A[i][j].
2. Rezultatele subproblemelor pot fi memorate n matricea S cu m linii i n coloane, n care:
S[i][j]=dimensiunea maxim a unei submatrice care are colul din dreapta jos n A[i][j].
Soluia problemei va fi valoarea maxim a din matricea S.
3. Construirea elementelor din matricea S :
a) Se copiaz prima linie i prima coloan din matricea A n matricea S:
S[i][1]=A[i][1]; i{1,2,...,n}
S[1][j]=A[1][j]; j{1,2,...,n}
b) Pentru celelalte elemente ale matricii S, se folosesc urmtoarele relaii de recuren:
dac A[i][j] = 1 atunci
S[i][j] = min(S[i][j-1], S[i-1][j], S[i-1][j-1]) + 1
altfel /* A[i][j] este 0*/
S[i][j] = 0
4. Rezolvarea relaiilor de recuren n manier bottom-up:
int
for
for
for

i, j;
(i=1; i<=m; i++) S[i][i]=A[i][1];
(j=1; j<=n; j++) S[1][j]=A[1][j];
(i=2; i<=m; i++)
for (j=2; j<=n; j++)
if (A[i][j]==0) S[i][j]==0;
else S[i][j]=min(S[i][j-1],S[i-1][j],S[i-1][j-1])+1;}

Pentru matricea binar din exemplul de mai sus, matricea S va avea elementele:
0
1
0
1
1

1
1
1
1
2

1
0
1
2
2

0
1
1
2
3

1
0
0
0
1

Submatricea ptratic de dimensiune maxim are


dimensiunea 3, i captul din dreapta jos n A[5][4]:
1 1 1
1 1 1
1 1 1