hennett έγραψε:Υπάρχει τρόπος να γνωρίζουμε εκ των προταίρων πόσο χρόνο θα πάρει για να ολοκλήρωθεί μια διαδικασία, χωρίς όμως αυτή να έχει εκτελεστεί ακόμα, έτσι ώστε να χρησιμοποιήσουμε ως σημείο αναφοράς το χρόνο αυτό?
Επιστημονικά ορθή απάντηση: Δεν ξέρουμε. Πιο σωστά, γενικά, δεν γίνεται να ξέρουμε (halting problem).
Βέβαια, στη ζωή είμαστε πάντα αισιόδοξοι. Ό,τι τρέχουν οι υπολογιστές, μπορεί να υπολογιστεί πόσο χρόνο παίρνει. Ο προφανής τρόπος είναι εκτελώντας το.
Εναλλακτικά, μια λύση που κλιμακώνεται (κάνει scale στα ελληνικά), είναι να ορισείς λειτουργίες που παίρνουν μια μονάδα του χρόνου (πχ πρόσθεση, αφαίρεση, σύγκριση) και να επιχειρηματαλογήσεις αν το μέγεθος εισόδου είναι 1, 5, 10, n πόσο χρόνο θα χρειαστείς. Υπολογίζοντας για το n, έχεις ένα γενικό συμπέρασμα.
Ευτυχώς για εμάς, αυτό είναι εύκολο συνήθως, όσον αφορά τη χειρότερη περίπτωση, όταν μιλάμε για πρακτικά προβλήματα και μάλιστα για τα πιο σημαντικά έχει ήδη υπολογιστεί (όχι θα αφήναν). Επομένως, αν είναι κάτι "κλασικό", όπως ταξινόμηση, αναζήτηση κτλ, θα βρεις τους χρόνους συνήθως με ένα απλό ψάξιμο στο ίντερνετ (time complexity). Αν είναι κάποιο δικό σου, τότε ένας απλό κανόνας είναι:
for i in range(n):
# do something
Χρόνος: n * (χρόνο του do something)
for i in range(n):
for j in range(m):
# do something
Χρόνος: n * m * (χρόνο του do something)
Οπότε μένει να υπολογίσεις το χρόνο του do something.
Αν σε ενδιαφέρει το θέμα, μπορείς να διαβάσεις βιβλία αλγορίθμων, δομών δεδομένων, αργότερα υπολογιστικής πολυπλοκότητας και μετά θα πάψει να σε απασχολεί το θέμα και θα σκέφτεσαι προβλήματα όπως αν μια μηχανή μπορεί να σκεφθεί όντως περισσότερα από έναν άνθρωπο ή όχι (όχι, δε μπορεί απλά ό,τι κάνει το κάνει γρήγορα).
Ελπίζω να μη κούρασε το ποστ. Αν τα βαριέσαι όλα αυτά, πάρε δυο τρια πειράματα για διαφορετικά μεγέθη εισόδου και βρες στο περίπου (είναι πειρασμός σε αυτή τη παρένθεση να βάλω πως το κάνεις αυτό, αλλά δεν έχει πολύ νόημα νομίζω, με το μάτι μια χαρά μάλλον θα είσαι, μιλώντας πρακτικά).
PS: Δε κρατήθηκα, στη προηγούμενη παρένθεση μέθοδος παρεμβολή Newton, μέθοδους ελαχίστων τετραγώνων κ.α.