Να το πούμε με απλά λόγια, Θωμά, γιατί όντως έτσι όπως το διαβάζεις σε μπερδεύει.
Ας πούμε οτι έχεις δεκα χαρτάκια. Ξερεις, εκείνα τα λευκά που γράφεις επάνω τους σημειώσεις. Γράφεις ένα νουμεράκι στην τύχη στο καθένα. Π.χ. 10, 5, 360, 34 κλπ. Και μετά τα ανακατεύεις.
Θελεις ένα τρόπο για να τα ταξινομήσεις από το μικρότερο ως το μεγαλύτερο. Ο τρόπος αυτός θα πρέπει να δουλεύει πάντα, να είναι προβλέψιμος, και να έχει συγκεκριμένη περιγραφή. Το να τα δείς "με το μάτι" δεν είναι προβλέψιμος τρόπος με συγκεκριμένη περιγραφή. Πρέπει να εφεύρεις μια μέθοδο, όπως π.χ. την εξής:
"Παιρνω τα δύο πρώτα χαρτάκια στη σειρά και βλέπω ποιό είναι το μεγαλύτερο. Αν το δεύτερο είναι μικρότερο τους αλλάζω θέση. Μετά παίρνω το 2ο και το 3ο και κάνω το ίδιο ωσπου να φτάσω με τα ζευγάρια στο τελευταίο. Μετά ξεκινάω πάλι από την αρχή και κάνω το ίδιο. Σταματάω όταν δεν υπάρχουν ζευγάρια στα οποία χρειάζεται αλλαγή".
Συγχαρητήρια, μόλις εφάρμοσες τον αλγόριθμο Bubble Sort στα χαρτάκια σου!
Αυτός είναι ένας αλγόριθμος. Ενας τρόπος να περιγράψουμε την επίλυση ενός προβλήματος. Το πρόβλημα είναι, στην περίπτωσή μας, πώς θα ταξινομήσουμε τα χαρτάκια, ανεξαρτήτως αν είναι 10, 100, 1000 και ανεξαρτήτως του τι νούμερα έχουν επάνω.
Το ίδιο πρόβλημα μπορεί να εμφανιστεί σε έναν υπολογιστή όταν κάπου έχεις αποθηκευμένα π.χ. δεδομένα για πελάτες σου που σου χρωστάνε και θέλεις να κάνεις μια ταξινόμηση κατά αύξουσα σειρά, από αυτόν που σου χρωστάει τα λιγότερα μέχρι αυτόν που σου χρωστάει τα περισσότερα.
Βεβαια, αυτά είναι απλά προβλήματα και οι κατασκευαστές των γλωσσών προγραμματισμού έχουν φροντίσει να τα λύσουν πριν από εμάς για εμάς. Η λογική όμως του αλγορίθμου παραμένει η ίδια. Ετσι λοιπον, η "ταξινόμηση χαρτακίων με νουμεράκια" είναι ένα "αλγοριθμικό πρόβλημα".
Σωτήρης Φιλιππίδης
DotSee Web Services