Σελίδα 1 από 1

Ποιός είναι ο γρηγορότερος τρόπος να διαβάσω αριθμούς από αρχείο?

Δημοσιεύτηκε: Σάβ Φεβ 22, 2020 5:30 pm
από kostas1507
Το προηγούμενο θέμα(Στην συζήτηση διάλογος και διαμάχες) αναφερόταν στις ταχύτητες διαβάσματος αρχείων στην c++ και μου έδωσε την ιδέα για αυτό. Εσείς οι λίγοι που χρησιμοποιείτε java πως διαβάζεται αριθμούς? Το Scanner το αποκλείω γιατί με τα σύνηθες δεδομένα του διαγωνισμού παίρνει περισσότερο από δευτερόλεπτο. Μετά από αρκετό ψάξιμο κατέληξα σε αυτήν την λύση που διαβάζει και ταυτόχρονα μετατρέπει σε αριθμό με την ίδια ταχύτητα πού το BufferedReader μόνο διαβάζει (στην οποία περίπτωση πρέπει μετά, με StreamTokinazer ή StringSplit να πάρεις τους αριθμούς ξεχωριστά).

Ξέρετε μήπως κάποιον γρηγορότερο τρόπο? Γιατί αν και πολύ (συγκριτικά) γρήγορη αυτή η λύση, στην απάντηση μου για την δεύτερη φάση του τρέχων διαγωνισμού πάλι παίρνει κάπου στο 80% του χρόνου (περίπου 50-80ms), για μία περίπτωση με της μεγαλύτερες πιθανές τιμές σύμφωνα με την εκφώνηση...

Ξέρω ότι δεν έχει πολύ σημασία σε αυτόν τον διαγωνισμό απλά με ενοχλεί που παίρνει τοσο μεγάλο ποσοστό του χρόνου!

Re: Ποιός είναι ο γρηγορότερος τρόπος να διαβάσω αριθμούς από αρχείο?

Δημοσιεύτηκε: Κυρ Αύγ 09, 2020 2:42 pm
από jbalatos
Γενικά, οι διαγωνισμοί πια δίνουν διαφορετικό time limit για ορισμένες γλώσσες. Πχ, η java που έχει περίπου διπλάσιο χρόνο εκτέλεσης από τη c++ (με την χρήση BufferedReader και StringTokenizer) έχει time limit διπλάσιο αυτού που αναγράφεται στην εκφώνηση. Η python συνήθως έχει πενταπλάσιο limit, κ.ο.κ. Άρα το i/o με StringTokenizer είναι πολύ απλό στην υλοποίηση και έχει πολύ καλούς χρόνους. Αν κυνηγούσαμε το βέλτιστο χρόνο, τότε στην c++ όλοι θα γράφαμε δικές μας συναρτήσεις με getchar() :D

Re: Ποιός είναι ο γρηγορότερος τρόπος να διαβάσω αριθμούς από αρχείο?

Δημοσιεύτηκε: Κυρ Αύγ 09, 2020 3:21 pm
από kostas1507
Σε ευχαριστώ Δημήτρη, παράξενο που δεν αναφέρεται αυτό με τα διαφορετικά time limit στην εκφώνηση των προβλημάτων..

Re: Ποιός είναι ο γρηγορότερος τρόπος να διαβάσω αριθμούς από αρχείο?

Δημοσιεύτηκε: Δευ Αύγ 10, 2020 10:07 pm
από jbalatos
Τίποτα, πιθανότατα αφήνουν το time limit σε 1sec στις εκφωνήσεις γιατί μπορεί να αξιοποιηθεί σε όλες τις γλώσσες ο μνημονικός κανόνας "Σε 1 δευτερόλεπτο τρέχουν εκατό εκατομμύρια πράξεις". Στην java είναι οι μισές, αλλά για την παρασκευή καλού αλγορίθμου δεν παίζει ρόλο.