Metodo 1:loop nidificati
Questo è l'approccio più semplice. Prima citiamo attraverso le colonne, quindi rielabora all'interno di ciascuna colonna.
`` `Java
Classe pubblica colonnajortraversal {
public static void traverseColumnMajor (int [] [] matrix) {
int righe =matrix.length;
int cols =matrix [0] .length; // presuppone una matrice rettangolare
per (int j =0; j
}
System.out.println (); // newline dopo ogni colonna
}
}
public static void main (string [] args) {
int [] [] matrix ={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println ("colonna-major attraversamento:");
TraverseColumnMajor (matrice);
}
}
`` `
Questo emetterà:
`` `
Attraversamento della colonna-major:
1 4 7
2 5 8
3 6 9
`` `
Metodo 2:singolo ciclo con calcolo (più efficiente per matrici di grandi dimensioni)
Questo metodo evita i loop nidificati, offrendo potenzialmente migliori prestazioni per matrici molto grandi riducendo le spese generali di loop. Calcola direttamente l'indice.
`` `Java
Classe pubblica columnAjortraversaleFFEGE {
public static void traverseColumnMaJoreFequy (int [] [] Matrix) {
int righe =matrix.length;
int cols =matrix [0] .length;
per (int k =0; k
int j =k / righe; // Indice colonna
System.out.print (matrix [i] [j] + "");
if ((k + 1) % righe ==0) {
System.out.println (); // newline dopo ogni colonna
}
}
}
public static void main (string [] args) {
int [] [] matrix ={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println ("colonna-major attraversamento (efficiente):");
TraverseColumnMaJoreFeaget (matrix);
}
}
`` `
Ciò produce lo stesso output del metodo 1. Il guadagno di efficienza è più evidente con matrici significativamente più grandi.
Considerazioni importanti:
* Matrici rettangolari: Entrambi i metodi assumono una matrice rettangolare (tutte le righe hanno lo stesso numero di colonne). Dovrai aggiungere la gestione degli errori (ad es. Controllare la matrice [i] .length` per ogni riga) se hai a che fare con matrici di forme irregolari.
* array frastagliato: Se si dispone di un array frastagliato (in cui le righe hanno un numero diverso di colonne), l'approccio a loop singolo (Metodo 2) non funzionerà direttamente. Dovresti adattarlo per gestire i conteggi di colonne variabili per riga. Il metodo 1 sarebbe più facilmente adattabile a questo caso.
* Layout di memoria: Mentre è possibile * attraversare * una matrice nell'ordine di colonna-major, gli array di Java sono archiviati in memoria usando l'ordine di riga-major. Ciò significa che il attraversamento di colonne-major non sarà efficiente dalla cache come il traversario di riga.
Scegli il metodo che si adatta meglio alle tue esigenze e alle dimensioni delle tue matrici. Per la maggior parte dei casi, il metodo 1 è più facile da comprendere e mantenere, mentre il metodo 2 potrebbe fornire un vantaggio di prestazioni per matrici estremamente grandi. Ricorda di gestire potenziali eccezioni, in particolare con matrici irregolari.
Informazioni correlate
Programmazione © www.354353.com