Δημοσιεύτηκε: 27 Ιουν 2011, 17:19
από arkanoid
migf1 έγραψε:Επειδή python δεν γνωρίζω, έχω μια απορία: υπάρχει κάποιος ιδιαίτερος λόγος που το sum υπολογίζεται σε ξεχωριστό loop και όχι μαζί με τα min και max στο αρχικό loop? Αυτή η υλοποίηση κάνει τον διπλάσιο χρόνο να εκτελεστεί!

Σίγουρα η υλοποίηση μου δεν είναι η καλύτερη ή η κομψότερη, αλλά διπλάσιο χρόνο εκτέλεσης από το να ήταν όλα σε μία επανάληψη, δεν κάνει. Και οι δύο υλοποιήσεις είναι O(n), αφού και στις δύο περιπτώσεις για κάθε στοιχείο του πίνακα γίνεται το ίδιο πλήθος ενεργειών, γραμμικό ανάλογα με την είσοδο του αλγόριθμου. Μάλλον δε χρειάζεσαι παραπάνω εξηγήσεις όμως, αφού μιλάς για χρόνους εκτέλεσης θα τα γνωρίζεις αυτά. Πάντως γενικότερα συμφωνώ, στο ότι θα ήταν καλύτερα όλα σε μία επανάληψη, αφού θα ήταν πιο απλός και ευανάγνωστος ο κώδικας.

migf1 έγραψε:Επίσης, υποθέτω πως η len( nums ) είναι κάποια συνάρτηση που επιστρέφει το πλήθος των στοιχείων του πίνακα nums. Αν η python δεν έχει κάποιο μηχανισμό να υπολογίζει δυναμικά το πλήθος των στοιχείων την 1η φορά που τον διατρέχουμε κι ενδεχομένως να το κρατάει σε κάποια εσωτερική μεταβλητή που διαβάζει κατόπιν η len() (ή έστω κάποιον εσωτερικό μηχανισμό που προ-υπολογίζει και αποηθηκεύει το πλήθος των πινάκων κατά τον ορισμό του) τότε το κάλεσμα της συνάρτησης len στην παραπάνω υλοποίηση είναι επιπρόσθετη επιβάρυνση σε ταχύτητα.

Θα μπορούσε κι αυτό να υπολογίζεται δυναμικά με μια έξτρα μεταβλητή μέσα στο αρχικό loop, μαζί με όλα τα υπόλοιπα. Έτσι ο κώδικας θα διέτρεχε τον πίνακα 1 μόνο φορά, αντί για 3 που τον διατρέχει τώρα.

Σε αυτό διαφωνώ απόλυτα. Η χρήση της len() κάνει τον κώδικα πιο ευανάγνωστο, και αφού υπάρχει ήδη σα συνάρτηση θα τη χρησιμοποιήσω και δε θα την ανακαλύψω πάλι/υλοποιήσω στην επανάληψη. Για το τρεις φορές ταχύτερα (αν αυτό εννοείς) ισχύουν τα ίδια με προηγουμένως.