Kolumn-major traversal betyder åtkomst till element i en 2D-matris (eller matris) kolumn efter kolumn, istället för standard-för-rad-raden (rad-major) ordning. Här är några sätt att implementera kolumn-major traversal i Java:
Metod 1:kapslade slingor
Detta är den mest enkla metoden. Vi itererar först genom kolumner och sedan rader i varje kolumn.
`` `Java
public class ColumnmaJortraversal {
public static void traversecolumnmajor (int [] [] matris) {
int -rader =matris.längd;
int cols =matris [0] .längd; // antar rektangulär matris
för (int j =0; j
för (int i =0; i
System.out.print (matris [i] [j] + "");
}
System.out.println (); // newline efter varje kolumn
}
}
public static void main (String [] args) {
int [] [] matris ={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println ("Column-Major traversal:");
traversecolumnmajor (matris);
}
}
`` `
Detta kommer att mata ut:
`` `
Kolumn-major traversal:
1 4 7
2 5 8
3 6 9
`` `
Metod 2:Enkel slinga med beräkning (effektivare för stora matriser)
Denna metod undviker kapslade slingor, vilket potentiellt erbjuder bättre prestanda för mycket stora matriser genom att minska slingans omkostnader. Det beräknar indexet direkt.
`` `Java
public class ColumnmaJortraversaleFicicient {
public static void traversecolumnmajorefficient (int [] [] matris) {
int -rader =matris.längd;
int cols =matris [0] .längd;
för (int k =0; k
int i =k % rader; // radindex
int j =k / rader; // kolumnindex
System.out.print (matris [i] [j] + "");
if ((k + 1) % rader ==0) {
System.out.println (); // newline efter varje kolumn
}
}
}
public static void main (String [] args) {
int [] [] matris ={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println ("Kolumn-major traversal (effektiv):");
traversecolumnmajorefficient (matris);
}
}
`` `
Detta ger samma utgång som metod 1. Effektivitetsförstärkningen är mer märkbar med betydligt större matriser.
Viktiga överväganden:
* rektangulära matriser: Båda metoderna antar en rektangulär matris (alla rader har samma antal kolumner). Du måste lägga till felhantering (t.ex. kontrollera "Matrix [i] .längd" för varje rad) om du har att göra med matriser av oregelbundna former.
* Jagged matriser: Om du har en taggad matris (där rader har olika antal kolumner) fungerar inte en-sling-metoden (metod 2) direkt. Du måste anpassa den för att hantera de olika kolumnantalerna per rad. Metod 1 skulle lättare anpassas till detta fall.
* Minneslayout: Medan du kan * korsa * en matris i kolumn-major-ordning, lagras Javas matriser i minnet med hjälp av rad-majororder. Detta innebär att kolumn-major traversal inte kommer att vara lika cache-effektiv som rad-major traversal.
Välj den metod som bäst passar dina behov och storleken på dina matriser. I de flesta fall är metod 1 lättare att förstå och underhålla, medan metod 2 kan ge en prestationsfördel för extremt stora matriser. Kom ihåg att hantera potentiella undantag, särskilt med oregelbundna matriser.