Vettore multidimensionale
Nella programmazione , un vettore multidimensionale è un vettore indicizzato da un elenco ordinato di numeri interi. Il numero di interi utilizzati in questo elenco per indicizzare il vettore multidimensionale è sempre lo stesso ed è noto come dimensionalità del vettore . D'altra parte, i limiti di ciascuno degli interi che fanno parte dell'indice determinano la dimensione del vettore . Un vettore con dimensionalità k è spesso chiamato k -dimensionale. I vettori unidimensionali corrispondono a vettori ordinari in cui gli elementi sono disposti in un'unica riga (o colonna); I vettori bidimensionali sono un altro modo per chiamare le matrici classiche in cui i loro elementi sono disposti in più righe e colonne (due dimensioni). In pratica, la dimensionalità di un vettore raramente supera il tre.
Rappresentazione in memoria
Il modo di disporre gli elementi di un vettore unidimensionale nella memoria di un computer è banale, poiché questo, di per sé, ha la forma di un vettore unidimensionale (molto grande). Quando si desidera memorizzare vettori n -dimensionali , tuttavia, il problema non è più evidente. Supponiamo di voler rappresentare questo semplice array bidimensionale:
Il modo più comune per indicizzare questa matrice (o vettore bidimensionale) è utilizzare la convenzione RC ( Row - Column , row -column ) , in cui gli elementi vengono referenziati indicando prima la riga e poi la colonna ( esempio, ), in questo modo abbiamo:
L'indicizzazione di vettori multidimensionali può essere eseguita in uno dei seguenti modi:
- parent-row order : gli elementi di ogni riga vengono archiviati in ordine, prima una riga, poi un'altra e così via. Questo metodo viene utilizzato principalmente su array statici dichiarati in C .
| 1 | Due | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
- Ordine colonna-principale : analogo al precedente ma questa volta memorizzando gli elementi per colonne anziché per righe:
| 1 | 4 | 7 | Due | 5 | 8 | 3 | 6 | 9 |
- Vettore X-dimensionale : in genere, i vettori multidimensionali sono rappresentati utilizzando un vettore unidimensionale che contiene riferimenti (o puntatori) ad altri vettori unidimensionali. Questi sottovettori possono essere, indistintamente, le righe o le colonne della matrice, tutto dipende dal criterio o dall'interpretazione che si vuole assumere.
Le prime due forme sono più compatte e hanno potenzialmente una migliore localizzazione di riferimento, ma sono anche più limitate; i vettori devono essere rettangolari , nel senso che nessuna riga può contenere più elementi di un'altra. I vettori di vettori, invece, consentono la creazione di vettori disuguali , detti anche vettori frastagliati , in cui l'intervallo valido di un indice dipende dal valore di un altro, ovvero che le diverse righe (o colonne) può essere di diverse dimensioni. I vettori di vettori sono utili anche nei linguaggi di programmazione che consentono solo vettori unidimensionali come primitivi.
In molte applicazioni, come le applicazioni numeriche che funzionano con le matrici , è necessario iterare su vettori rettangolari bidimensionali in modo prevedibile. Ad esempio, il calcolo di un elemento del prodotto matrice A x B implica l'iterazione su una riga di A e una colonna di B contemporaneamente. Indicizzando gli elementi dell'array così come sono archiviati in memoria, è necessario ottimizzare il più possibile le operazioni di localizzazione di ciascun elemento. A volte un compilatore può determinare automaticamente il layout dell'array sequenziale di elementi di un vettore in modo che siano anche archiviati in sequenza in memoria, nel nostro esempio potrebbe scegliere l'ordine del genitore di riga per A e l'ordine del genitore di colonna per B. _ Esistono più modi per memorizzare gli elementi di una matrice in memoria, che saranno più efficienti per altri tipi di problemi, ad esempio se si desidera eseguire un'iterazione sulla diagonale principale di una matrice.