Traversal de coluna Major significa acessar elementos de uma coluna de uma coluna de matriz 2D (ou matriz) por coluna, em vez do pedido de linha por linha (linha-major) padrão. Aqui estão algumas maneiras de implementar travessias de coluna-major em Java:
Método 1:Loops aninhados
Esta é a abordagem mais direta. Iteramos primeiro através das colunas e depois linhas dentro de cada coluna.
`` `Java
classe pública columnmajorTraversal {
public static void TraverSecolumnmajor (int [] [] matriz) {
int linhas =matrix.length;
int cols =matriz [0] .Length; // assume a matriz retangular
for (int j =0; j
for (int i =0; i System.out.print (matriz [i] [j] + "");
}
System.out.println (); // newline após cada coluna
}
}
public static void main (string [] args) {
int [] [] matrix ={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println ("Column-Major Traversal:");
TraverSecolumnmajor (Matrix);
}
}
`` `
Isso será lançado:
`` `
Traversal da coluna-major:
1 4 7
2 5 8
3 6 9
`` `
Método 2:Loop único com cálculo (mais eficiente para grandes matrizes)
Esse método evita loops aninhados, oferecendo potencialmente melhor desempenho para matrizes muito grandes, reduzindo a sobrecarga do loop. Ele calcula o índice diretamente.
`` `Java
classe pública columnmajorTraverSale eficiente {
public static void TraverSecolumnMajoreFability (int [] [] matriz) {
int linhas =matrix.length;
int cols =matriz [0] .Length;
for (int k =0; k int i =k % linhas; // ÍNDICE DE LINHA
int j =k / linhas; // Índice de coluna
System.out.print (matriz [i] [j] + "");
if ((k + 1) % linhas ==0) {
System.out.println (); // newline após cada coluna
}
}
}
public static void main (string [] args) {
int [] [] matrix ={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println ("Column-Major Traversal (eficiente):");
TraverSecolumnmajore eficiente (Matrix);
}
}
`` `
Isso produz a mesma saída que o método 1. O ganho de eficiência é mais perceptível com matrizes significativamente maiores.
Considerações importantes:
* Matrizes retangulares: Ambos os métodos assumem uma matriz retangular (todas as linhas têm o mesmo número de colunas). Você precisará adicionar manuseio de erros (por exemplo, verificando `matriz [i] .Length` para cada linha) se você estiver lidando com matrizes de formas irregulares.
* Matrizes irregulares: Se você tiver uma matriz irregular (onde as linhas têm um número diferente de colunas), a abordagem de malha única (Método 2) não funcionará diretamente. Você teria que adaptá -lo para lidar com as diferentes contagens de colunas por linha. O método 1 seria mais facilmente adaptável a este caso.
* Layout da memória: Enquanto você pode * atravessar * uma matriz em ordem de coluna-major, as matrizes de Java são armazenadas na memória usando a ordem de linha-major. Isso significa que a travessia da coluna-major não será tão eficiente em cache quanto a travessia de linha-major.
Escolha o método que melhor atenda às suas necessidades e ao tamanho de suas matrizes. Para a maioria dos casos, o método 1 é mais fácil de entender e manter, enquanto o método 2 pode fornecer uma vantagem de desempenho para matrizes extremamente grandes. Lembre -se de lidar com possíveis exceções, especialmente com matrizes irregulares.