Προγραμματισμός

Γνώση Υπολογιστών >> Προγραμματισμός >  >> Προγραμματισμός Java

Πώς μπορώ να εφαρμόσω τη κύρια διαδρομή της στήλης στη Java;

Η Traversal Column-Major σημαίνει πρόσβαση σε στοιχεία μιας στήλης 2D συστοιχίας (ή μήτρας) κατά στήλη, αντί της προεπιλεγμένης σειράς σειράς προς σειρά (Row-Major). Ακολουθούν μερικοί τρόποι για την εφαρμογή της μεταφοράς στήλης-major στη Java:

Μέθοδος 1:ένθετοι βρόχοι

Αυτή είναι η πιο απλή προσέγγιση. Επαναλαμβάνουμε πρώτα τις στήλες, στη συνέχεια σειρές σε κάθε στήλη.

`` `java

δημόσια τάξη ColumnMaJorTraversal {

δημόσιο στατικό κενό traverseColumnMaJor (int [] [] matrix) {

int σειρές =matrix.length;

int cols =matrix [0]. // υποθέτει ορθογώνια μήτρα

για (int j =0; j για (int i =0; i <σειρές; i ++) {// Επαναφορά σειρές σε κάθε στήλη

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 μπορεί να προσφέρει ένα πλεονέκτημα απόδοσης για εξαιρετικά μεγάλες μήτρες. Θυμηθείτε να χειρίζεστε πιθανές εξαιρέσεις, ειδικά με ακανόνιστες μήτρες.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα