Documente Academic
Documente Profesional
Documente Cultură
Tablouri
07 / 03 / 2020
1
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
Cuprins
2
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
0. Tablouri unidimensionale – scurta recapitulare
C / C++ Declarare Pascal
A & * + ... c M #
char b1 [34]; b1 [1] = ‘&’;
0 1 2 3 …
3
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
0. Tablouri unidimensionale – scurta recapitulare
Varianta C / C++
Cantitatea de memorie necesara pentru inregistrarea unui tablou este direct
proportionala cu tipul si marimea sa.
4
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
0. Tablouri unidimensionale – scurta recapitulare
C / C++ Pascal
5
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
0. Tablouri unidimensionale – scurta recapitulare
C / C++ Pascal
6
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
0 1 5 -2 8 3
1 5 -6 -8 7 0
2
1 3 1 -4 2
1 5 -2 8 3 5 -6 -8 7 0 1 3 1 -4 2
a[0][0] ………. a[0][4] a[1][0] ………………………………………………… a[2][4]
1 5 -2 8 3 5 -6 -8 7 0 1 3 1 -4 2
7
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
… …
Numele unui tablou este un pointer constant catre primul sau element
8
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
1. Tablouri bidimensionale – notiuni teoretice
Varianta C / C++
Cantitatea de memorie necesara pentru inregistrarea unui tablou este
direct proportionala cu tipul si marimea sa.
9
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
1. Tablouri bidimensionale – notiuni teoretice
10
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.1 – Puncte “șa”
Exemplu
int a[3][5]
0 1 2 3 4
0 10 5 -2 8 33
1 4 -8 -6 7 0
2
3 13 2 4 9
11
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.1 – Puncte “șa” Matrice cu elemente distincte
Sugestie de implementare:
12
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.1 – Puncte “șa” Matrice cu elemente distincte
13
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.1 – Puncte “șa”
Cum ati rezolva problema in cazul unei matrice cu n linii si m coloane cu
elemente nedistincte?
Exemplu
int a[3][5]
0 1 2 3 4
0 1 4 1 5 2
1 3 5 3 7 3
2
2 3 0 1 2
14
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.1 – Puncte “șa” Matrice cu elemente nedistincte
Sugestie de implementare:
16
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.2 – Ordonare diagonala
Se citeste o matrice patratica de dimensiune n x n. Să se sorteze crescator valorile
aflate pe diagonala principală, astfel incat, pe fiecare linie si pe fiecare coloana sa
ramana aceleasi valori (liniile pot fi insa intr-o alta intr-o alta ordine in noua matrice,
la fel si coloanele); altfel spus, sa se sorteze crescator valorile de pe diagonala
principala prin interschimbari de linii si de coloane.
1 2 6 4 3 1 4 4 6 7
2 5 2 1 8 2 4 3 6 2
3 7 6 4 4 3 7 8 1 9
17
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.2 – Ordonare diagonala
Se citeste o matrice patratica de dimensiune n x n. Să se sorteze crescator valorile
aflate pe diagonala principală, astfel incat, pe fiecare linie si pe fiecare coloana sa
ramana aceleasi valori (liniile pot fi insa intr-o alta intr-o alta ordine in noua matrice,
la fel si coloanele); altfel spus, sa se sorteze crescator valorile de pe diagonala
prinicipala prin interschimbari de linii si de coloane
Sugestie de implementare:
18
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.2 – Ordonare diagonala
19
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.2 – Ordonare diagonala
20
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.3 – Diagonalele si paralelele acestora
int a[4][4] 8 9
0 1 2 3 7 3 1 2
0 9 1 7 8
1 4 8 7 6 5
1 2 6 4 3
9 6 1 4 8 4 2 7
2 5 2 1 8
2 2 4 3 1 6
3 7 6 4 4
5 6 8 4
7 4
21
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.3 – Diagonalele si paralelele acestora
Sugestie de implementare:
22
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.3 – Diagonalele si paralelele acestora O(n3)
23
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.3 – Diagonalele si paralelele acestora O(n2)
Paralele la diagonala principala Paralele la diagonala secundara
24
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
https://www.pbinfo.ro/?pagina=probleme&id=602
25
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
https://www.pbinfo.ro/?pagina=probleme&id=602
26
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 1. numarul de regine este mult mai mare decat n – Complexitate O(n2)
Sugestie de implementare:
1. construim matricea a cu semnificatia
a[x][y] = 0, daca pe pozitia (x,y) nu este plasata o regina
a[x][y] = numarul reginei aflata pe linia x si coloana y, altfel
1
2 3
4
5 6 7
8 9
matricea a
celulele libere memoreaza 0
27
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 1. numarul de regine este mult mai mare decat n – Complexitate O(n2)
Sugestie de implementare:
1. construim matricea a cu semnificatia
a[x][y] = 0, daca pe pozitia (x,y) nu este plasata o regina
a[x][y] = numarul reginei aflata pe linia x si coloana y;
2. construim vectorul atac cu semnificatia
atac[i]=cate regine sunt atacate de regina i (initial 0);
3. pentru fiecare regina stabilim ce regine de pe aceeasi line ataca, parcurgand
matricea linie cu linie;
1
De exemplu, când parcurgem linia 5,
2 3 găsim următoarele perechi de numere pozitive
consecutive (care au doar 0 intre ele):
4 (5,6) crește atac[5] si atac[6]
5 6 7
(6,7) crește atac[6] si atac[7]
8 9
28
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 1. numarul de regine este mult mai mare decat n – Complexitate O(n2)
Sugestie de implementare:
1. construim matricea a cu semnificatia
a[x][y] = 0, daca pe pozitia (x,y) nu este plasata o regina
a[x][y] = numarul reginei aflata pe linia x si coloana y;
2. construim vectorul atac cu semnificatia
atac[i]=cate regine sunt atacate de regina i (initial 0);
3. pentru fiecare regina stabilim ce regine de pe aceeasi line ataca, parcurgand
matricea linie cu linie;
4. pentru fiecare regina stabilim ce regine de pe aceeasi coloana ataca,
parcurgand matricea coloana cu coloana;
5. pentru fiecare regina stabilim ce regine de pe aceeasi diagonala paralela cu
cea principala ataca, parcurgand matricea paralel cu diagonala principala;
6. pentru fiecare regina stabilim ce regine de pe aceeasi diagonala paralela cu
cea secundara ataca, parcurgand matricea paralel cu diagonala secundara
7. Parcurgem vectorul atac[] pentru gasirea elementului maxim si a frecventei
acestuia.
29
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 1. numarul de regine este mult mai mare decat n – Complexitate O(n2)
Actualizarea vectorului (int atac[501], int a[101][101], int n)
“atac” prin considerarea
conflictelor de pe aceeasi 1
linie 2 3
Regina atac
4
1 0 5 6 7
2 1
8 9
3 1
4 0
5 1
6 2
7 1
8 1
9 1 30
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 1. numarul de regine este mult mai mare decat n – Complexitate O(n2)
Actualizarea vectorului (int atac[501],int
“atac” prin considerarea a[101][101],int n)
conflictelor de pe aceeasi 1
coloana 2 3
Regina Atac
4
1 1 5 6 7
2 2
8 9
3 2
4 0
5 3
6 2
7 2
8 2
9 2 31
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 1. numarul de regine este mult mai mare decat n – Complexitate O(n2)
Actualizarea vectorului (int atac[501], int a[101][101],
“atac” prin considerarea int n)
conflictelor de pe
1
diagonalele paralele cu
2 3
diagonala principala
Regina Atac 4
5 6 7
1 2
2 3 8 9
3 3
4 1
5 4
6 4
7 2
8 2 32
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 1. numarul de regine este mult mai mare decat n – Complexitate O(n2)
Actualizarea vectorului “atac” prin
considerarea conflictelor de pe
diagonalele paralele cu diagonala
1
principala
2 3
Regina Atac
1 2 4
5 6 7
2 3
3 3 8 9
4 1
5 4
6 4
7 2
8 2
9 3
33
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 1. numarul de regine este mult mai mare decat n – Complexitate O(n2)
Actualizarea vectorului
(int atac[501], int a[101][101],
“atac” prin considerarea
int n)
conflictelor de pe
1
diagonalele paralele cu
2 3
diagonala secundara
Regina Atac 4
5 6 7
1 2
2 3 8 9
3 4
4 1
5 4
6 5
7 2
8 2 34
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 1. numarul de regine este mult mai mare decat n – Complexitate O(n2)
Actualizarea vectorului “atac” prin
considerarea conflictelor de pe
diagonalele paralele cu diagonala 1
secundara 2 3
Regina Atac
4
1 2
5 6 7
2 3
3 4 8 9
4 1
5 4
6 5
7 2
8 2
9 3 35
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 1. numarul de regine este mult mai mare decat n – Complexitate O(n2)
36
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 2. numarul de regine este mult mai mic decat n – Complexitate O(m2)
Sugestie de implementare:
1. consideram un vector de structuri “r”, unde fiecare componenta retine coordonatele
unei regine pe tabla de sah;
2. sortam vectorul in ordinea crescatoare a absciselor pozitiilor reginelor; la abscise
egale, sortam dupa ordonata;
3. construim vectorul atac cu semnificatia
atac[i]=cate regine sunt atacate de regina i;
4. pentru fiecare regina “i” cautam prima regina aflata in dreapta sa, pe aceeasi linie
= prima regina care ii urmeaza in vectorul r care se afla pe aceeasi linie ;
5. pentru fiecare regina “i” cautam prima regina aflata sub ea, pe aceeasi coloana;
= prima regina care ii urmeaza in vectorul r care se afla pe aceeasi coloana ;
6. pentru fiecare regina “i” cautam prima regina aflata pe aceeasi diag. principala;
7. pentru fiecare regina “i” cautam prima regina aflata pe aceeasi diag. secundara;
8. Parcurgem vectorul atac[] pentru gasirea elementului maxim si a frecventei
acestuia.
37
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 2. numarul de regine este mult mai mic decat n – Complexitate O(m2)
Actualizarea vectorului
“atac” prin considerarea
primului conflict aparut
pe aceeasi linie
40
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 2. numarul de regine este mult mai mic decat n – Complexitate O(m2)
Actualizarea vectorului
“atac” prin
considerarea primului
conflict aparut pe
aceeasi coloana,
respectiv pe aceeasi
diagonala principala si
secundara
41
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.4 – Atac regine
Caz 2. numarul de regine este mult mai mic decat n – Complexitate O(m2)
42
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice
Exemplu
int a[3][5]
1 2 3 4 5
4 6 8 10 12
5 7 12 24 29
43
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice O(nm)
- rezolvare1 – Cautarea standard a unui element intr-o matrice
- se parcurge matricea element cu element si verifica existenta valorii
cautate in matrice;
45
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice O(n log m)
46
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice O(n log m)
rezolvare3 - Cautarea unui element intr-o matrice folosind, pe fiecare linie, cautarea
binara, intrucat fiecare linie e ordonata crescator. Optimizare: ignorarea acelor linii
care sigur nu contin elementul x (cele care incep cu elemente > x si cele care se
termina cu elemente < x).
47
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice O(n log m)
rezolvare3 - Cautarea unui element intr-o matrice folosind, pe fiecare linie, cautarea
binara, intrucat fiecare linie e ordonata crescator. Optimizare: ignorarea acelor linii
care sigur nu contin elementul x (cele care incep cu elemente > x si cele care se
termina cu elemente < x).
48
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice O(n + m)
rezolvare4 – restrictionam mai mult decat in rezolvarea3 zona in care cautam
valoarea x, pe baza urmatoarelor observatii:
1. Daca un element de pe pozitia (i,j) este mai mare (strict) decat x, atunci toate
elementele aflate pe pozitii (r,s) cu r ≥ i si s ≥ j sunt mai mari decat x:
a[i][j]>x
Toate elementele din aceasta zona vor fi
mai mari decat x
x nu mai trebuie cautat in aceasta zona
49
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice O(n + m)
rezolvare4 – restrictionam mai mult decat in rezolvarea3 zona in care cautam
valoarea x, pe baza urmatoarelor observatii:
2. Daca un element de pe pozitia (i,j) este mai mic (strict) decat x, atunci toate
elementele aflate pe pozitii (r,s) cu r ≤ i si s ≤ j sunt mai mici decat x:
50
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice O(n + m)
rezolvare4 – restrictionam mai mult decat in rezolvarea3 zona in care cautam
valoarea x, pe baza urmatoarelor observatii:
3. Din observatiile anterioare rezulta ca putem parcurge matricea:
- pe o linie de la dreapta la stanga pana intalnim un element a[i][j]≤ x ;
daca elementul este chiar x, atunci ne oprim;
altfel, din primele observatii, nu mai trebuie sa cautam pe coloanele > j (nici pe
liniile ≤ i); astfel, putem cobori pe coloana j pe care am ajuns
Cautam x=21
7 8 10 23 24 presupunem liniile si coloanele numeroate de la 1
-Parcurgem prima linie de la dreapta la stanga
12 16 18 25 26
pana la primul element < 21, adica pana la a[1][3]=10
13 17 19 27 29
-In regiunea gri nu mai trebuie sa cautam,
20 21 22 30 31 sigur sunt elemente > 21
28 37 40 41 45
Coboram pe coloana 3
51
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice O(n + m)
rezolvare4 – restrictionam mai mult decat in rezolvarea3 zona in care cautam
valoarea x, pe baza urmatoarelor observatii:
3. Din observatiile anterioare rezulta ca putem parcurge matricea:
- pe o linie de la dreapta la stanga pana intalnim un element a[i][j]≤ x ;
daca elementul este chiar x, atunci ne oprim;
altfel, din primele observatii, nu mai trebuie sa cautam pe coloanele > j (nici pe
liniile ≤ i); astfel, putem cobori pe coloana j pe care am ajuns
- coboram pe coloana curenta j pana cand intalnim un element a[i][j] ≥ x ;
daca elementul este chiar x, atunci ne oprim;
altfel, din primele observatii, nu mai trebuie sa cautam pe linii < i (nici pe
coloanele ≥ j); Cautam x=21
7 8 10 23 24 Coboram pe coloana 3 pana la a[4][3]=22>21
12 16 18 25 26
- In regiunea mov nu mai trebuie sa cautam,
13 17 19 27 29 sigur sunt elemente < 21 (nici in cea gri,
conform pasului anterior)
20 21 22 30 31
mergem la stanga pe linia 3
28 37 40 41 45 52
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice O(n + m)
rezolvare4 – restrictionam mai mult decat in rezolvarea3 zona in care cautam
valoarea x, pe baza urmatoarelor observatii:
3. Din observatiile anterioare rezulta ca putem parcurge matricea:
- pe o linie de la dreapta la stanga pana intalnim un element a[i][j]≤ x ;
daca elementul este chiar x, atunci ne oprim;
altfel, din primele observatii, nu mai trebuie sa cautam pe coloanele > j (nici pe
liniile ≤ i); astfel, putem cobori pe coloana j pe care am ajuns
- coboram pe coloana curenta j pana cand intalnim un element a[i][j] ≥ x ;
daca elementul este chiar x, atunci ne oprim;
altfel, din primele observatii, nu mai trebuie sa cautam pe linii < i (nici pe
coloanele ≥ j); este suficient sa mergem, din nou, pe linia curenta la stanga
si reluam etapele
7 8 10 23 24
12 16 18 25 26 Am gasit 21 ! STOP
13 17 19 27 29
20 21 22 30 31
28 37 40 41 45 53
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice O(n + m)
rezolvare4 – restrictionam mai mult decat in rezolvarea3 zona in care cautam
valoarea x, pe baza urmatoarelor observatii:
Spre exemplu, dacă valoarea căutată ar fi fost 15, traseul este urmatorul,
si se ajunge la o linie restrictionata (care incepe cu un element>15)
7 8 10 23 24
12 16 18 25 26
13 17 19 27 29
20 21 22 30 31
28 37 40 41 45
54
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.5 – Exista valoare in matrice O(n + m)
rezolvare4 – Parcurgerea alternativa a liniilor si coloanelor pana cand se gaseste
numarul sau se atinge limita unei linii sau a unei coloane.
55
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.6 – Element comun tuturor liniilor (daca exista)
Se consideră o matrice în care fiecare linie este sortată crescător. Să se
determine un element comun tuturor liniilor (dacă există).
Exemplu
int a[4][5]
1 7 12 15 20
3 4 7 11 16
2 3 4 7 15
7 8 9 10 11
56
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.6 – Element comun tuturor liniilor (daca exista)
Sugestie de implementare:
1. rezolvare() – foloseste algoritmul de cautare secventiala pentru gasirea unei valori
pe o linie; aplica algoritmul pentru a cauta fiecare element de pe prima linie in fiecare
linie din matrice;
2. rezolvare_binar() – optimizeaza subprogramul rezolvare() cautand binar o valoare
intr-un vector;
3.– optimizeaza primele doua subprograme restrictionand limitele intervalelor de
cautare (determinam pentru fiecare linie intre ce coloane este suficient sa cautam);
4. rezolvare3() – O(mn) :
4.1 – se considera un vector col_crt[i] = retine ultima coloana de pe linia i pana la
care trebuie cautat elementul comun;
4.2 - determinam valoarea minima din col_crt - este o limita superioara pentru
elementul comun;
4.3 – scadem pt fiecare linie i col_crt[i] pana ajunge pe un element
<=a[lin_min][col_crt[lin_min]] (mai la dreapta nu are sens sa cautam pe linie);
4.4 – definim cnt = cate limite de coloane sunt egale cu valoarea minima
a[lin_min][col_crt[lin_min]];
4.5 – daca pentru fiecare linie elementul de pe coloana col_crt[i] este
=a[lin_min][col_crt[lin_min]] atunci liniile au un element comun.
57
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.6 – Element comun tuturor liniilor (daca exista) O(nm2)
58
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.6 – Element comun tuturor liniilor (daca exista) O(nmlog m)
Cautarea binara
Algoritmul complet de rezolvare
59
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.6 – Element comun tuturor liniilor (daca exista) O(nm2)
Cu stabilirea limitelor de interval.
1 7 12 15 20 Minimul ultimei
Maximul primei
coloane coloane
3 4 7 11 16
2 3 4 7 15
7 8 9 10 11
60
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.6 – Element comun tuturor liniilor (daca exista) O(nm2)
Algoritmul complet de rezolvare Cu stabilirea limitelor de interval.
61
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.6 – Element comun tuturor liniilor (daca exista) O(nmlog m)
Algoritmul complet de rezolvare Cu stabilirea limitelor de interval.
62
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.6 – Element comun tuturor liniilor (daca exista) O(nm)
Algoritmul complet de rezolvare
Sugestie de implementare:
4. rezolvare3() – O(nm) :
4.1 – se considera un vector col_crt[i] = retine ultima coloana de pe linia i pana la
care trebuie cautat elementul comun;
4.2 - determinam valoarea minima din col_crt - este o limita superioara pentru
elementul comun;
4.3 – scadem pt fiecare linie i col_crt[i] pana ajunge pe un element
<=a[lin_min][col_crt[lin_min] (mai la dreapta nu are sens sa cautam pe linie);
4.4 – definim cnt = cate limite de coloane sunt egale cu valoarea minima
a[lin_min][col_crt[lin_min]];
4.5 – daca cnt = numarul de linii din matrice, atunci am gasit valoarea comuna
4.6 – daca pentru fiecare linie elementul de pe coloana col_crt[i] este
=a[lin_min][col_crt[lin_min]] atunci liniile au un element comun.
4.7 – se repeta procedeul pana la iesirea din matrice sau pana la gasirea valorii
comune
63
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.6 – Element comun tuturor liniilor (daca exista) O(nm)
Algoritmul complet de rezolvare
1 7 12 15 20 Gasirea valorilor 1 7 12 15 20
3 4 7 11 16 maxime initiale pana
3 4 7 11 16
la care trebuie
2 3 4 7 15 realizata cautarea pe 2 3 4 7 15
7 8 9 10 11 fiecare linie 7 8 9 10 11
64
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.6 – Element comun tuturor liniilor (daca exista) O(nm)
Algoritmul complet de rezolvare
1 7
3 4 7 11
2 3 4 7
7 8 9 10 11
1 7
3 4 7
2 3 4 7
7
65
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
2. Tablouri bidimensionale – Aplicatii
Aplicatie 2.6 – Element comun tuturor liniilor (daca exista) O(nm)
Algoritmul complet de rezolvare
Pentru val = 7 Cnt = 4 – Numarul de aparitii ale valorii = numarul de linii din
matrice (cautare cu succes) .
1 7
3 4 7
2 3 4 7
7
66
Facultatea de Matematica si Informatica
Universitatea din Bucuresti
Succes!
67