Ricerca di u elemeto i ua matrice Sia data ua matrice xm, i cui gli elemeti di ogi riga e di ogi coloa soo ordiati i ordie crescete. Si vuole u algoritmo che determii se u elemeto x è presete ella matrice i O(+m). Esempio. Sia x = 94 e la matrice 5X4: I A[1,1] si ha il miimo, visto che ella prima coloa c è il miimo di ogi riga e ella prima riga il miimo di ogi coloa. Nell esempio A[1,1] = 5 I A[,m] c è ivece il massimo, visto che ell ultima coloa c è il massimo di ogi riga e ell ultima riga il massimo di ogi coloa. Nell esempio A[5,4] = 98
Quali cofroti 1 Bisoga che ogi cofroto coseta di trascurare ei prossimi cofroti u itera riga o u itera coloa. Se si cofrota l elemeto cercato co il primo della prima riga, si possoo elimiare gli elemeti di ua riga o di ua coloa? Esempio. Sia x = 41 e la matrice 5X4: Poiché A[1,1] è il miimo, abbiamo che se l elemeto è maggiore o possiamo escludere alcu elemeto, oltre al miimo stesso, se ivece l elemeto cercato è miore del miimo, possiamo cocludere che o presete. Nell esempio se x = 41, poiché 41 > 5, escludiamo solo 5; se x = 2, allora x < 5 allora l elemeto o è presete e si può uscire dalla procedura di ricerca. Quidi il cofroto co il primo elemeto o è la scelta giusta!
Quali cofroti 2 Aalogamete il cofroto co l ultimo elemeto dell ultima riga o cosete di elimiare ua riga o ua coloa. Se cofroto l elemeto cercato co l ultimo della prima riga, posso elimiare gli elemeti di ua riga o di ua coloa? Esempio. La matrice 5X4: se x = 41 Poiché A[1,] è il massimo sulla prima riga, se l elemeto cercato è maggiore di A[1,] si possoo escludere tutti gli elemeti della prima riga. Nell esempio x = 41 > 15, quidi si possoo escludere tutti gli elemeti della prima riga, visto che soo miori di 15 e quidi miori di 41.
Quali cofroti 3 Se cofroto l elemeto cercato co l ultimo della prima riga, posso elimiare gli elemeti di ua riga o di ua coloa? Esempio. La matrice 5X4: se x = 7 Poiché A[1,] è il miimo dell ultima coloa, se se l elemeto cercato è miore di A[1,] si possoo escludere tutti gli elemeti dell ultima coloa. Nell esempio x = 7, si possoo escludere tutti gli elemeti della coloa visto che soo maggiori di 15 e quidi di 7.
Cotiuiamo l esempio co x = 41 Si cerca x = 41 poiché 41 > 15 e si elimia la prima riga: x = 41 > 21 e si elimia la riga: x = 41 < 45 e si elimia la coloa:
esempio cofroto fiali x = 41< 42, si elimiao gli elemeti della coloa Ora il cofroto è co 41, poiché x = 41 si esce perché trovato
Ricerca i matrice INPUT: ua matrice A xm e l elemeto da cercare i A, x. PREC: gli elemeti di ogi riga e ogi coloa di A soo ordiati i ordie crescete OUTPUT: la posizioe di x se occorre, -1 altrimeti. RicMatrice(A,x) fiché c è ua riga o ua coloa da esamiare se x è uguale all elemeto, a, ell agolo superiore destro della matrice, esci restituedo gli idici di questa etrata se x è miore di a allora prepara il cofroto di x co l elemeto ella stessa riga e ella coloa precedete altrimeti co l elemeto ulla coloa di a e ella riga successiva se o trovato retur -1 Prof. E. Fachii - Itr. Alg. 7
I geerale all iizio si elimia la coloa, cioè si passa al cofroto co A[1,m-1] = k 1 2 m 1 k 2 x < k x viee cofrotato co A[1,m] = k x > k si elimia la riga, cioè si passa al cofroto co A[2,m] = k 1 2 m -1 m 1 k k 2 1 2 m 1 k 2 k Se x = A[1,m] allora si esce.
Caso itermedio 1 2 i 1 2 j m Gli elemeti elle righe precedeti l i-sima e elle coloe successive alla j- sima soo già stati elimiati dai cofroti precedeti. k x < k x si cofrota co A[i,j] = k x > k 1 2 j-1 j m 1 2 i k k 1 2 j m 1 2 i k i+1 k elimia la coloa, cioè cofrota co k = A[i,j-1] elimia la riga, cioè cofrota co k = A[i+1,j]
Ricerca i matrice INPUT: ua matrice A xm e l elemeto da cercare i A, x. PREC: gli elemeti di ogi riga e ogi coloa di A soo ordiati i ordie crescete OUTPUT: la posizioe di x se occorre, -1 altrimeti. RicMatrice(A,x) sia il umero delle righe di A sia m il umero delle coloe di A if = 0 o m = 0 the retur -1 if x < A[1,1] or x > A[,m] the retur -1 i=1; j=m while i ad j 1 do if (x == A[i,j]) the retur (i,j) if (x < A[i,j]) the j= j-1 else i=i+1 if i > or j<1 the retur -1 Prof. E. Fachii - Itr. Alg. 10
Ricerca i matrice: complessità RicMatrice(A,x) sia il umero delle righe di A sia m il umero delle coloe di A if = 0 o m = 0 the retur -1 if x < A[1,1] or x > A[,m] the retur -1 i=1 j=m while i ad j 1 do if (x = A[i,j]) the retur (i,j) if (x < A[i,j]) the j= j-1 else i=i+1 the retur -1 Θ(1) T(,m) = Θ(+m), el caso peggiore. Prof. E. Fachii - Itr. Alg. 11