switch έγραψε:Αν το αρχείο δοκιμής αποτελείται από τον ίδιο χαρακτήρα τόσο στο S, όσο και στο Τ τότε πάμε σε O(N*N) αλλιώς σταματά πολύ γρήγορα (σε όλα τα άλλα τέστ οι χρόνοι είναι πολλοί μικροί σε βαθμό ανακρίβειας κατά την επανάληψη, διότι σπάει πολύ γρήγορα η σύγκριση).
Είναι φυσικά κατηγορίας brute force.
Για την ακριβεια τα testcases για τα οποια ενας τετοιος αλγοριθμος δεν περναει με τιποτα ειναι πολυ περισσοτερα. Αρκει να χρησιμοποιηθει το μοτιβο που αναφερατε, και καπου στη μεση του string να πεταμε λιγο randomly-generated κειμενο ωστε να μη μπορει να το προβλεψει ο διαγωνιζομενος.
Βεβαιως ο αλγοριθμος που χρησιμοποιει Hashing δε θα ειχε προβλημα σε κανενα τετοιο αρχειο δοκιμης.
Σε καθε περιπτωση, η αναλυση των αλγοριθμων γινεται παντα με worst case analysis. Υπαρχουν πολλοι λογοι για αυτο.
Αρχικα υπαρχουν πολλες, και πολυ διαφορετικες μεταξυ τους, ειδικες περιπτωσεις σε καθε προβλημα. Αν ενθαρρυνουμε τους διαγωνιζομενους να μην πηγαινουν για την βελτιστη λυση, αλλα να σκεφτονται ειδικες περιπτωσεις οπου ο αλγοριθμος τους θα τρεξει γρηγορα, τοτε ο διαγωνισμος θα ηταν αδικος.
Δυο διαγωνιζομενοι που ειχαν σκεφτει καποιον αλγοριθμο για ειδικη περιπτωση μπορει να ειχαν πολυ διαφορετικα σκορ, διοτι τη μια απο αυτες την ειχαν φανταστει και αυτοι που φτιαχνουν τα test, και την αλλη οχι. Για τις περιπτωσεις λοιπον που δεχομαστε sub-optimal αλγοριθμους ανακοινωνονται στην εκφωνηση οι ιδιαιτεροτητες τους (οπως με την Πηνελοπη στο διαγωνισμο Δεκεμβριου) ωστε να υπαρχει ισοτητα.
Λιγοτερο σημαντικο ειναι το γεγονος οτι και στον Πανελληνιο αλλα κυριως στους διεθνεις Διαγωνισμους τα testcases ειναι πολυ σκληρα. Πολυ πολυ σκληρα. Σε σημειο που αν δεν εχεις βελτιστη πολυπλοκοτητα, ειναι σιγουρο οτι δε θα παρεις ποντους.
Το πιο σημαντικο ομως κατα τη γνωμη μου ειναι οτι ευελπιστουμε ο διαγωνισμος αυτος να μην ειναι αλλος ενας χωρος οπου τα παιδια θα ανταγωνιστουν (φροντισαν οι Πανελληνιες να καλλιεργησουν αυτο το κλιμα, δε χρειαζομαστε εμεις).
Το αν μια μη βελτιστη λυση παρει η δεν παρει βαθμους απο τα συγκεκριμενα testcases ειναι στην πραγματικοτητα αδιαφορο.
Ο στοχος ειναι να εθιστουν τα παιδια στην κομψοτητα, στη μαθηματικη ομορφια, στον λακωνικο εκφραστικοτατο αλγοριθμο . Οπως και να το κανουμε, μια brute-force σημαινει στην ουσια και επιφανειακη κατανοηση του προβληματος. Προφανως και αυτο δεν ειναι κακο, για να μαθουμε ηρθαμε ολοι. Μια ομορφη ομως λυση που χρειαζεται οχι 5 και 6 φορες λιγοτερο χρονο, αλλα Ν φορες (!) σημαινει οτι κατι εχει πιασει απο τους εσωτερικους μηχανισμους, απο τις σχεσεις που διεπουν τα στοιχεια του προβληματος.
Η διαφορα μια λεπτοδουλεμενης λυσης απο μια brute force (βλασφημο αυτο που θα πω, τηρουμενων των αναλογιων παντα) ειναι τοσο μεγαλη οσο η διαφορα του νησιωτικου σπιτιου με την πολυκατοικια. Βεβαια και τα δυο την κανουν την δουλεια τους, αλλα το ενα φροντισε να μπει και να δεσει με το περιβαλλον του και το αλλο επιβαλλεται με τον ιδιο ακριβως τροπο, ειτε στην Ελλαδα ειτε στη Γερμανια.
Ελπιζω να βοηθησα.