Le strutture dati – Lettura 2

Le matrici notazioni e proprietà

Proprietà delle matrici

Nella lettura della lezione 1, sono state esaminate varie tipologie di strutture dati e la loro implementazione, nei vari linguaggi programmazione quali C++,C#, Java e Python.
La struttura dati array come per altro già detto è una struttura dati omogenea monodimensionale
Le matrici molto utili in molti ambiti dalla matematica all’informatica passando per l’economia, sono strutture dati a N dimensioni, per semplicità esamineremo solo le matrici con N=2, ovvero bidimensionali.
Un aspetto importante da sottolineare, è che le strutture dati analizzate quali la matrice, e gli array sono strutture dati ad accesso dirtto, ovvero è possibile accedere direttamente al dato interessato, attraverso l’indirce nel caso di un array e di una coppia di indici nel caso di una matrici.
Per meglio chiarire, definiamo un array in modo simbolico (in pseudocodice per meglio comprendere) di 10 elementi:

x[]={1,2,3,4,5,6,7,8,9,10}

E stato definito un array di interi la cui dimensione è di 10 elementi N=10, e l’indice dell’array ha un intervallo di valori possibili da 0 a 9, diciamo i in (0,9).
Un qualunque elemento dell’array è identificato mediante la notazione:
x[i], se ad esempio i=3, questo implica che x[3]=4, x[0]=1, x[9]=10, e così via.

Le matrici notazioni e proprietà:

Le matrici nel linguaggio matematico, sono definite da un numero di righe e di colonne, che indicheremo con n e m valori interi positivi, non necessariamente uguali.
Assegnata una coppia di indici i e j tali che 0<=i<n; 0<=j<m un elemento della matrice è possibile indicarlo con la notazione in pseudocodifce:
mat[i,j] oppure mat[i[[j], oppure mat(i,j), oppure matij sono tutte notazioni equivalenti.
Per meglio comprendere la questione definiamo una matrice di 3 righe e 3 colonne, che rappresentiamo con una tabella:

12-254
213412
7-215

mat[0][1]=-2, mat[2][1]=-21, e così via, come si nota l’indice di riga o di colonna non sarà mai uguale a 3, poiché ed è utile chiarirlo in informatica anche il valore di indice pari a zero ha significato, in quanto rappresenta la prima cella di memoria utile per memorizzare il dato. Su quanti byte occupi ogni singolo elemento di matrice questo è legato a molteplici fattori; quali linguaggio di programmazione in uso, architettura del sistema.
Per semplicità in C++ per dichiarare una matrice vuota di 3 righe e 3 colonne è possibile scrivere:
int x[3][3];

In C++ ogni numero intero (int) occupa 4 byte, viene da se che una matrice di 3 righe e 3 colonne occupa 9 per 4 byte pari a 36 byte.
E’ possibile in C++ definire una matrice con dei valori iniziali con la notazione:

int [3][3] ={{1,2,3},{2,1,9},{3,2,-1}};

Nel linguaggio Java per definire una matrice è possibile,

int [][] x = new int [n][m]; dove n e m sono le dimensioni, è possibile definire anche una matrice con dei valori all’intero:

int [3][2] x ={{1,2},{0,9},{3,-1}};

in C# la dichiarazione di una matrice ad esempio di numeri reali può essere svolta con la dichiarazione:
double [,] x = new double [n,m] definisce una matrice di n righe per m colonne.
E’ possibile dichiarare una matrice con gli elementi all’intero modificando la dichiarazione precedente:

double [,] x = new int [2,3] {{1,3,2},{3,2,1}};

In Python come per altro citato nella lettura “Le strutture dati Lezione 1”, è possibile definire una matrice come lista di lista o utilizzare la libreria NumPy per definire proprio le matrici in senso stretto.
Se adottiamo la definizione come lista di lista la sintassi è:
matrice = [[1,2],[2,3],[3,2]] n questo modo è definita una matrice di 3 righe e due colonne per accedere ad un elemento della matrice è utilizzata la solita notazione:

matrice[i][j] dove i e j sono maggiori o uguali a zero e minori di n e m.
E’ possibile utilizzando la libreria Numpy realizzare una matrice (tale approccio è molto consigliato se ade esempio sono necessari ai fini della risoluzione del problema operazioni con le matrici anche complesse come somma, prodotti, trasposizione, e altro ancora).
Ecco la notazione in Python:

import numpy as np
mat = np.array ((n,m))

definisce un array vuoto di n righe per m colonne
se contemporaneamente è necessario inserire dei valori allora una sintassi è:

import numpy as np
matrice = np.array([{3,2,1,0],[3,1,21,-1]])

stiamo utilizzando sempre la clausola import numpy as np poichè le prove le puoi svolgere in questo modo direttamente nel prompt dei comandi di Python.

Esaminate le questioni, sulla dichiarazione e l’inizializzazione delle matrici nei vari linguaggi C++,C#,Python, Java, possiamo definire alcune proprietà delle matrici.

Proprietà della matrici

Una matrice è quadrata quando il numero delle righe è pari al numero delle colonne m=n.

In una matrice quadrata è definite la diagonale principale ovvero gli elementi della matrice tali che i=j;

In una matrice quadrata è definita la diagonale secondaria ovvero gli elementi della matrice tali che i+j=n dove n è la dimensione della matrice (se i e j partono da zero come accade questa proprietà matematica diventa i+j=n-1);

E’ definita la matrice trasposta come una nuova matrice mt che è ottenuta da quella di partenza scambiando righe con colonne mt[i[[j]=m[j][i]

E’ definito l’operatore Determinante come una funzione che partendo dalla matrice attraverso un calcolo restituisce uno scalere reale (un singolo numero). Tale operazione è molto utilizzata in matematica.

Con questo ultima serie di definizioni termina la Lettura 2.
Nella prossima lezione 3 esamineremo le strutture dati enumerazioni , record e tabella.