Μέθοδος 1:ένθετοι βρόχοι
Αυτή είναι η πιο απλή προσέγγιση. Επαναλαμβάνουμε πρώτα τις στήλες, στη συνέχεια σειρές σε κάθε στήλη.
`` `java
δημόσια τάξη ColumnMaJorTraversal {
δημόσιο στατικό κενό traverseColumnMaJor (int [] [] matrix) {
int σειρές =matrix.length;
int cols =matrix [0]. // υποθέτει ορθογώνια μήτρα
για (int j =0; j
System.out.print (matrix [i] [j] + "");
}
System.out.println (); // Newline μετά από κάθε στήλη
}
}
δημόσιο στατικό κενό κύριο (String [] args) {
int [] [] matrix ={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println ("Column-Major Traversal:");
TraverseColumnMaJor (Matrix);
}
}
`` `
Αυτό θα εξάγει:
`` `
Traversal Column-Major:
1 4 7
2 5 8
3 6 9
`` `
Μέθοδος 2:Ενιαίος βρόχος με υπολογισμό (πιο αποτελεσματική για μεγάλες μήτρες)
Αυτή η μέθοδος αποφεύγει τους ένθετους βρόχους, ενδεχομένως προσφέροντας καλύτερες επιδόσεις για πολύ μεγάλες μήτρες μειώνοντας το βρόχο πάνω από το κεφάλι. Υπολογίζει απευθείας τον δείκτη.
`` `java
δημόσια τάξη CollowMaJorTraversaleFium {
δημόσιο στατικό κενό traverseColumnMaJoreffery (int [] [] matrix) {
int σειρές =matrix.length;
int cols =matrix [0].
για (int k =0; k <σειρές * cols; k ++) {
int i =k % σειρές. // ευρετήριο γραμμής
int j =k / rows; // Δείκτης στήλης
System.out.print (matrix [i] [j] + "");
αν ((k + 1) % σειρές ==0) {
System.out.println (); // Newline μετά από κάθε στήλη
}
}
}
δημόσιο στατικό κενό κύριο (String [] args) {
int [] [] matrix ={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println ("Column-Major Traversal (αποτελεσματική):");
TraverseColumnMajoreffer (Matrix);
}
}
`` `
Αυτό παράγει την ίδια έξοδο με τη μέθοδο 1. Το κέρδος απόδοσης είναι πιο αισθητή με σημαντικά μεγαλύτερες μήτρες.
Σημαντικές εκτιμήσεις:
* ορθογώνιες μήτρες: Και οι δύο μέθοδοι υποθέτουν μια ορθογώνια μήτρα (όλες οι σειρές έχουν τον ίδιο αριθμό στήλες). Θα χρειαστεί να προσθέσετε χειρισμό σφαλμάτων (π.χ., ελέγχοντας το `matrix [i] .length 'για κάθε σειρά) εάν ασχολείστε με μήτρες ακανόνιστων σχημάτων.
* Οδονισμένες συστοιχίες: Εάν έχετε μια οδοντωτή συστοιχία (όπου οι σειρές έχουν διαφορετικούς αριθμούς στηλών), η προσέγγιση ενός βρόχου (μέθοδος 2) δεν θα λειτουργήσει απευθείας. Θα πρέπει να το προσαρμόσετε για να χειριστείτε τις ποικίλες μετρήσεις στήλης ανά σειρά. Η μέθοδος 1 θα ήταν πιο εύκολα προσαρμόσιμη σε αυτήν την περίπτωση.
* διάταξη μνήμης: Ενώ μπορείτε να διασχίσετε * μια μήτρα σε σειρά Column-Major, οι συστοιχίες Java αποθηκεύονται στη μνήμη χρησιμοποιώντας σειρά Row-Major. Αυτό σημαίνει ότι η Traversal Collem-Major δεν θα είναι τόσο αποδοτική από την προσωρινή μνήμη όσο και η διαδρομή Row-Major.
Επιλέξτε τη μέθοδο που ταιριάζει καλύτερα στις ανάγκες σας και το μέγεθος των πινάκων σας. Για τις περισσότερες περιπτώσεις, η μέθοδος 1 είναι πιο κατανοητή και διατήρηση, ενώ η μέθοδος 2 μπορεί να προσφέρει ένα πλεονέκτημα απόδοσης για εξαιρετικά μεγάλες μήτρες. Θυμηθείτε να χειρίζεστε πιθανές εξαιρέσεις, ειδικά με ακανόνιστες μήτρες.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα